Merge branch '3.0' into td_25179_update
This commit is contained in:
commit
0a3a597c70
|
@ -373,7 +373,7 @@ conn.execute("CREATE STABLE weather(ts TIMESTAMP, temperature FLOAT) TAGS (locat
|
||||||
<TabItem value="websocket" label="WebSocket connection">
|
<TabItem value="websocket" label="WebSocket connection">
|
||||||
|
|
||||||
```python
|
```python
|
||||||
conn = taosws.connect(url="ws://localhost:6041")
|
conn = taosws.connect("taosws://localhost:6041")
|
||||||
# Execute a sql, ignore the result set, just get affected rows. It's useful for DDL and DML statement.
|
# Execute a sql, ignore the result set, just get affected rows. It's useful for DDL and DML statement.
|
||||||
conn.execute("DROP DATABASE IF EXISTS test")
|
conn.execute("DROP DATABASE IF EXISTS test")
|
||||||
conn.execute("CREATE DATABASE test")
|
conn.execute("CREATE DATABASE test")
|
||||||
|
|
|
@ -375,7 +375,7 @@ conn.execute("CREATE STABLE weather(ts TIMESTAMP, temperature FLOAT) TAGS (locat
|
||||||
<TabItem value="websocket" label="WebSocket 连接">
|
<TabItem value="websocket" label="WebSocket 连接">
|
||||||
|
|
||||||
```python
|
```python
|
||||||
conn = taosws.connect(url="ws://localhost:6041")
|
conn = taosws.connect("taosws://localhost:6041")
|
||||||
# Execute a sql, ignore the result set, just get affected rows. It's useful for DDL and DML statement.
|
# Execute a sql, ignore the result set, just get affected rows. It's useful for DDL and DML statement.
|
||||||
conn.execute("DROP DATABASE IF EXISTS test")
|
conn.execute("DROP DATABASE IF EXISTS test")
|
||||||
conn.execute("CREATE DATABASE test")
|
conn.execute("CREATE DATABASE test")
|
||||||
|
|
|
@ -95,6 +95,8 @@ struct tm *taosLocalTime(const time_t *timep, struct tm *result, char *buf);
|
||||||
struct tm *taosLocalTimeNolock(struct tm *result, const time_t *timep, int dst);
|
struct tm *taosLocalTimeNolock(struct tm *result, const time_t *timep, int dst);
|
||||||
time_t taosTime(time_t *t);
|
time_t taosTime(time_t *t);
|
||||||
time_t taosMktime(struct tm *timep);
|
time_t taosMktime(struct tm *timep);
|
||||||
|
int64_t user_mktime64(const uint32_t year, const uint32_t mon, const uint32_t day, const uint32_t hour,
|
||||||
|
const uint32_t min, const uint32_t sec, int64_t time_zone);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,46 +25,6 @@
|
||||||
|
|
||||||
#include "tlog.h"
|
#include "tlog.h"
|
||||||
|
|
||||||
/*
|
|
||||||
* mktime64 - Converts date to seconds.
|
|
||||||
* Converts Gregorian date to seconds since 1970-01-01 00:00:00.
|
|
||||||
* Assumes input in normal date format, i.e. 1980-12-31 23:59:59
|
|
||||||
* => year=1980, mon=12, day=31, hour=23, min=59, sec=59.
|
|
||||||
*
|
|
||||||
* [For the Julian calendar (which was used in Russia before 1917,
|
|
||||||
* Britain & colonies before 1752, anywhere else before 1582,
|
|
||||||
* and is still in use by some communities) leave out the
|
|
||||||
* -year/100+year/400 terms, and add 10.]
|
|
||||||
*
|
|
||||||
* This algorithm was first published by Gauss (I think).
|
|
||||||
*
|
|
||||||
* A leap second can be indicated by calling this function with sec as
|
|
||||||
* 60 (allowable under ISO 8601). The leap second is treated the same
|
|
||||||
* as the following second since they don't exist in UNIX time.
|
|
||||||
*
|
|
||||||
* An encoding of midnight at the end of the day as 24:00:00 - ie. midnight
|
|
||||||
* tomorrow - (allowable under ISO 8601) is supported.
|
|
||||||
*/
|
|
||||||
static int64_t user_mktime64(const uint32_t year0, const uint32_t mon0, const uint32_t day, const uint32_t hour,
|
|
||||||
const uint32_t min, const uint32_t sec, int64_t time_zone) {
|
|
||||||
uint32_t mon = mon0, year = year0;
|
|
||||||
|
|
||||||
/* 1..12 -> 11,12,1..10 */
|
|
||||||
if (0 >= (int32_t)(mon -= 2)) {
|
|
||||||
mon += 12; /* Puts Feb last since it has leap day */
|
|
||||||
year -= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// int64_t res = (((((int64_t) (year/4 - year/100 + year/400 + 367*mon/12 + day) +
|
|
||||||
// year*365 - 719499)*24 + hour)*60 + min)*60 + sec);
|
|
||||||
int64_t res;
|
|
||||||
res = 367 * ((int64_t)mon) / 12;
|
|
||||||
res += year / 4 - year / 100 + year / 400 + day + ((int64_t)year) * 365 - 719499;
|
|
||||||
res = res * 24;
|
|
||||||
res = ((res + hour) * 60 + min) * 60 + sec;
|
|
||||||
|
|
||||||
return (res + time_zone);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ==== mktime() kernel code =================//
|
// ==== mktime() kernel code =================//
|
||||||
static int64_t m_deltaUtc = 0;
|
static int64_t m_deltaUtc = 0;
|
||||||
|
|
|
@ -41,7 +41,7 @@ static const char *offlineReason[] = {
|
||||||
"timezone not match",
|
"timezone not match",
|
||||||
"locale not match",
|
"locale not match",
|
||||||
"charset not match",
|
"charset not match",
|
||||||
"ttl change on write not match"
|
"ttlChangeOnWrite not match",
|
||||||
"unknown",
|
"unknown",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -821,7 +821,19 @@ static bool isPrimaryKeyImpl(SNode* pExpr) {
|
||||||
FUNCTION_TYPE_IROWTS == pFunc->funcType) {
|
FUNCTION_TYPE_IROWTS == pFunc->funcType) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
} else if (QUERY_NODE_OPERATOR == nodeType(pExpr)) {
|
||||||
|
SOperatorNode* pOper = (SOperatorNode*)pExpr;
|
||||||
|
if (OP_TYPE_ADD != pOper->opType && OP_TYPE_SUB != pOper->opType) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!isPrimaryKeyImpl(pOper->pLeft)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (QUERY_NODE_VALUE != nodeType(pOper->pRight)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -367,8 +367,49 @@ int32_t taosGetTimeOfDay(struct timeval *tv) {
|
||||||
|
|
||||||
time_t taosTime(time_t *t) { return time(t); }
|
time_t taosTime(time_t *t) { return time(t); }
|
||||||
|
|
||||||
|
/*
|
||||||
|
* mktime64 - Converts date to seconds.
|
||||||
|
* Converts Gregorian date to seconds since 1970-01-01 00:00:00.
|
||||||
|
* Assumes input in normal date format, i.e. 1980-12-31 23:59:59
|
||||||
|
* => year=1980, mon=12, day=31, hour=23, min=59, sec=59.
|
||||||
|
*
|
||||||
|
* [For the Julian calendar (which was used in Russia before 1917,
|
||||||
|
* Britain & colonies before 1752, anywhere else before 1582,
|
||||||
|
* and is still in use by some communities) leave out the
|
||||||
|
* -year/100+year/400 terms, and add 10.]
|
||||||
|
*
|
||||||
|
* This algorithm was first published by Gauss (I think).
|
||||||
|
*
|
||||||
|
* A leap second can be indicated by calling this function with sec as
|
||||||
|
* 60 (allowable under ISO 8601). The leap second is treated the same
|
||||||
|
* as the following second since they don't exist in UNIX time.
|
||||||
|
*
|
||||||
|
* An encoding of midnight at the end of the day as 24:00:00 - ie. midnight
|
||||||
|
* tomorrow - (allowable under ISO 8601) is supported.
|
||||||
|
*/
|
||||||
|
int64_t user_mktime64(const uint32_t year, const uint32_t mon, const uint32_t day, const uint32_t hour,
|
||||||
|
const uint32_t min, const uint32_t sec, int64_t time_zone) {
|
||||||
|
uint32_t _mon = mon, _year = year;
|
||||||
|
|
||||||
|
/* 1..12 -> 11,12,1..10 */
|
||||||
|
if (0 >= (int32_t)(_mon -= 2)) {
|
||||||
|
_mon += 12; /* Puts Feb last since it has leap day */
|
||||||
|
_year -= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// int64_t _res = (((((int64_t) (_year/4 - _year/100 + _year/400 + 367*_mon/12 + day) +
|
||||||
|
// _year*365 - 719499)*24 + hour)*60 + min)*60 + sec);
|
||||||
|
int64_t _res = 367 * ((int64_t)_mon) / 12;
|
||||||
|
_res += _year / 4 - _year / 100 + _year / 400 + day + ((int64_t)_year) * 365 - 719499;
|
||||||
|
_res *= 24;
|
||||||
|
_res = ((_res + hour) * 60 + min) * 60 + sec;
|
||||||
|
|
||||||
|
return _res + time_zone;
|
||||||
|
}
|
||||||
|
|
||||||
time_t taosMktime(struct tm *timep) {
|
time_t taosMktime(struct tm *timep) {
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
|
#if 0
|
||||||
struct tm tm1 = {0};
|
struct tm tm1 = {0};
|
||||||
LARGE_INTEGER t;
|
LARGE_INTEGER t;
|
||||||
FILETIME f;
|
FILETIME f;
|
||||||
|
@ -405,6 +446,19 @@ time_t taosMktime(struct tm *timep) {
|
||||||
|
|
||||||
t.QuadPart -= offset.QuadPart;
|
t.QuadPart -= offset.QuadPart;
|
||||||
return (time_t)(t.QuadPart / 10000000);
|
return (time_t)(t.QuadPart / 10000000);
|
||||||
|
#else
|
||||||
|
time_t result = mktime(timep);
|
||||||
|
if (result != -1) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#if _MSC_VER >= 1900
|
||||||
|
int64_t tz = _timezone;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
return user_mktime64(timep->tm_year + 1900, timep->tm_mon + 1, timep->tm_mday, timep->tm_hour, timep->tm_min,
|
||||||
|
timep->tm_sec, tz);
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
return mktime(timep);
|
return mktime(timep);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -957,6 +957,7 @@
|
||||||
,,n,script,./test.sh -f tsim/query/udfpy.sim
|
,,n,script,./test.sh -f tsim/query/udfpy.sim
|
||||||
,,y,script,./test.sh -f tsim/query/udf_with_const.sim
|
,,y,script,./test.sh -f tsim/query/udf_with_const.sim
|
||||||
,,y,script,./test.sh -f tsim/query/join_interval.sim
|
,,y,script,./test.sh -f tsim/query/join_interval.sim
|
||||||
|
,,y,script,./test.sh -f tsim/query/join_pk.sim
|
||||||
,,y,script,./test.sh -f tsim/query/unionall_as_table.sim
|
,,y,script,./test.sh -f tsim/query/unionall_as_table.sim
|
||||||
,,y,script,./test.sh -f tsim/query/multi_order_by.sim
|
,,y,script,./test.sh -f tsim/query/multi_order_by.sim
|
||||||
,,y,script,./test.sh -f tsim/query/sys_tbname.sim
|
,,y,script,./test.sh -f tsim/query/sys_tbname.sim
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
system sh/stop_dnodes.sh
|
||||||
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
sql connect
|
||||||
|
|
||||||
|
sql create database test;
|
||||||
|
sql use test;
|
||||||
|
sql create table st(ts timestamp, f int) tags(t int);
|
||||||
|
sql insert into ct1 using st tags(1) values(now, 0)(now+1s, 1)
|
||||||
|
sql insert into ct2 using st tags(2) values(now+2s, 2)(now+3s, 3)
|
||||||
|
sql select * from (select _wstart - 1s as ts, count(*) as num1 from st interval(1s)) as t1 inner join (select _wstart as ts, count(*) as num2 from st interval(1s)) as t2 on t1.ts = t2.ts
|
||||||
|
|
||||||
|
if $rows != 3 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data01 != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data11 != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
if $data21 != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data03 != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
if $data13 != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data23 != 1 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select * from (select _wstart - 1d as ts, count(*) as num1 from st interval(1s)) as t1 inner join (select _wstart as ts, count(*) as num2 from st interval(1s)) as t2 on t1.ts = t2.ts
|
||||||
|
|
||||||
|
sql select * from (select _wstart + 1a as ts, count(*) as num1 from st interval(1s)) as t1 inner join (select _wstart as ts, count(*) as num2 from st interval(1s)) as t2 on t1.ts = t2.ts
|
||||||
|
|
||||||
|
sql_error select * from (select _wstart * 3 as ts, count(*) as num1 from st interval(1s)) as t1 inner join (select _wstart as ts, count(*) as num2 from st interval(1s)) as t2 on t1.ts = t2.ts
|
||||||
|
|
||||||
|
sql create table sst(ts timestamp, ts2 timestamp, f int) tags(t int);
|
||||||
|
sql insert into sct1 using sst tags(1) values('2023-08-07 13:30:56', '2023-08-07 13:30:56', 0)('2023-08-07 13:30:57', '2023-08-07 13:30:57', 1)
|
||||||
|
sql insert into sct2 using sst tags(2) values('2023-08-07 13:30:58', '2023-08-07 13:30:58', 2)('2023-08-07 13:30:59', '2023-08-07 13:30:59', 3)
|
||||||
|
sql select * from (select ts - 1s as jts from sst) as t1 inner join (select ts-1s as jts from sst) as t2 on t1.jts = t2.jts
|
||||||
|
if $rows != 4 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql select * from (select ts - 1s as jts from sst) as t1 inner join (select ts as jts from sst) as t2 on t1.jts = t2.jts
|
||||||
|
if $rows != 3 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
sql_error select * from (select ts2 - 1s as jts from sst) as t1 inner join (select ts2 as jts from sst) as t2 on t1.jts = t2.jts
|
||||||
|
|
||||||
|
#system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
||||||
|
|
Loading…
Reference in New Issue