Support a new stmt in Nereids:
`CALL EXECUTE_STMT("jdbc", "stmt")`
So that we can pass the origin stmt directly to the datasource of a jdbc catalog.
show case:
```
mysql> select * from mysql_catalog.db1.tbl1;
+------+------+
| k1 | k2 |
+------+------+
| 111 | 222 |
+------+------+
1 row in set (0.63 sec)
mysql> call execute("mysql_catalog", "insert into db1.tbl1 values(1,'abc')");
Query OK, 0 rows affected (0.01 sec)
mysql> select * from mysql_catalog.db1.tbl1;
+------+------+
| k1 | k2 |
+------+------+
| 111 | 222 |
| 1 | abc |
+------+------+
2 rows in set (0.03 sec)
mysql> call execute_stmt("mysql_catalog", "delete from db1.tbl1 where k1=111");
Query OK, 0 rows affected (0.01 sec)
mysql> select * from mysql_catalog.db1.tbl1;
+------+------+
| k1 | k2 |
+------+------+
| 1 | abc |
+------+------+
1 row in set (0.03 sec)
```
新加case注意事项
-
变量名前要写 def,否则是全局变量,并行跑的 case 的时候可能被其他 case 影响。
Problematic code:
ret = ***Correct code:
def ret = *** -
尽量不要在 case 中 global 的设置 session variable,或者修改集群配置,可能会影响其他 case。
Problematic code:
sql """set global enable_pipeline_x_engine=true;"""Correct code:
sql """set enable_pipeline_x_engine=true;""" -
如果必须要设置 global,或者要改集群配置,可以指定 case 以 nonConcurrent 的方式运行。
-
case 中涉及时间相关的,最好固定时间,不要用类似 now() 函数这种动态值,避免过一段时间后 case 就跑不过了。
Problematic code:
sql """select count(*) from table where created < now();"""Correct code:
sql """select count(*) from table where created < '2023-11-13';"""