@@ -110,6 +110,73 @@ async fn test_call_fuse_snapshot_interpreter() -> Result<()> {
110
110
Ok ( ( ) )
111
111
}
112
112
113
+
114
+ #[ tokio:: test( flavor = "multi_thread" , worker_threads = 1 ) ]
115
+ async fn test_call_fuse_block_interpreter ( ) -> Result < ( ) > {
116
+ let ( _guard, ctx) = crate :: tests:: create_query_context ( ) . await ?;
117
+ let mut planner = Planner :: new ( ctx. clone ( ) ) ;
118
+
119
+ // NumberArgumentsNotMatch
120
+ {
121
+ let query = "call system$fuse_block()" ;
122
+ let ( plan, _, _) = planner. plan_sql ( query) . await ?;
123
+ let executor = InterpreterFactoryV2 :: get ( ctx. clone ( ) , & plan) ?;
124
+ assert_eq ! ( executor. name( ) , "CallInterpreter" ) ;
125
+ let res = executor. execute ( ) . await ;
126
+ assert_eq ! ( res. is_err( ) , true ) ;
127
+ let expect = "Code: 1028, displayText = Function `FUSE_BLOCK` expect to have 3 arguments, but got 0." ;
128
+ assert_eq ! ( expect, res. err( ) . unwrap( ) . to_string( ) ) ;
129
+ }
130
+
131
+ // UnknownTable
132
+ {
133
+ let query = "call system$fuse_block(default, test, xxxx)" ;
134
+ let ( plan, _, _) = planner. plan_sql ( query) . await ?;
135
+ let executor = InterpreterFactoryV2 :: get ( ctx. clone ( ) , & plan) ?;
136
+ assert_eq ! ( executor. name( ) , "CallInterpreter" ) ;
137
+ let res = executor. execute ( ) . await ;
138
+ assert_eq ! ( res. is_err( ) , true ) ;
139
+ assert_eq ! (
140
+ res. err( ) . unwrap( ) . code( ) ,
141
+ ErrorCode :: UnknownTable ( "" ) . code( )
142
+ ) ;
143
+ }
144
+
145
+ // BadArguments
146
+ {
147
+ let query = "call system$fuse_block(system, tables, xxxx)" ;
148
+ let ( plan, _, _) = planner. plan_sql ( query) . await ?;
149
+ let executor = InterpreterFactoryV2 :: get ( ctx. clone ( ) , & plan) ?;
150
+ assert_eq ! ( executor. name( ) , "CallInterpreter" ) ;
151
+ let res = executor. execute ( ) . await ;
152
+ assert_eq ! ( res. is_err( ) , true ) ;
153
+ let expect =
154
+ "Code: 1015, displayText = expects table of engine FUSE, but got SystemTables." ;
155
+ assert_eq ! ( expect, res. err( ) . unwrap( ) . to_string( ) ) ;
156
+ }
157
+
158
+ // Create table
159
+ {
160
+ let query = "\
161
+ CREATE TABLE default.a(a bigint)\
162
+ ";
163
+
164
+ let ( plan, _, _) = planner. plan_sql ( query) . await ?;
165
+ let executor = InterpreterFactoryV2 :: get ( ctx. clone ( ) , & plan) ?;
166
+ let _ = executor. execute ( ) . await ?;
167
+ }
168
+
169
+ // FuseHistory
170
+ {
171
+ let query = "call system$fuse_block(default, a, xxxx)" ;
172
+ let ( plan, _, _) = planner. plan_sql ( query) . await ?;
173
+ let executor = InterpreterFactoryV2 :: get ( ctx. clone ( ) , & plan) ?;
174
+ let _ = executor. execute ( ) . await ?;
175
+ }
176
+
177
+ Ok ( ( ) )
178
+ }
179
+
113
180
#[ tokio:: test( flavor = "multi_thread" , worker_threads = 1 ) ]
114
181
async fn test_call_clustering_information_interpreter ( ) -> Result < ( ) > {
115
182
let ( _guard, ctx) = crate :: tests:: create_query_context ( ) . await ?;
0 commit comments