1- #![ allow( non_snake_case) ]
2-
31use std:: convert:: TryFrom ;
42
53use anyhow:: Context ;
@@ -11,6 +9,7 @@ use common::{
119use database:: {
1210 query:: TableFilter ,
1311 DeveloperQuery ,
12+ Transaction ,
1413} ;
1514use errors:: ErrorMetadata ;
1615use serde:: {
@@ -27,25 +26,49 @@ use value::{
2726 TableName ,
2827} ;
2928
30- use super :: async_syscall :: {
31- DatabaseSyscallsV1 ,
32- SyscallProvider ,
29+ use super :: {
30+ async_syscall :: QueryManager ,
31+ DatabaseUdfEnvironment ,
3332} ;
3433use crate :: environment:: helpers:: {
3534 parse_version,
3635 with_argument_error,
3736 ArgName ,
3837} ;
3938
39+ pub trait SyscallProvider < RT : Runtime > {
40+ fn table_filter ( & self ) -> TableFilter ;
41+ fn query_manager ( & mut self ) -> & mut QueryManager < RT > ;
42+ fn tx ( & mut self ) -> Result < & mut Transaction < RT > , ErrorMetadata > ;
43+ }
44+
45+ impl < RT : Runtime > SyscallProvider < RT > for DatabaseUdfEnvironment < RT > {
46+ fn table_filter ( & self ) -> TableFilter {
47+ if self . udf_path . is_system ( ) {
48+ TableFilter :: IncludePrivateSystemTables
49+ } else {
50+ TableFilter :: ExcludePrivateSystemTables
51+ }
52+ }
53+
54+ fn query_manager ( & mut self ) -> & mut QueryManager < RT > {
55+ & mut self . query_manager
56+ }
57+
58+ fn tx ( & mut self ) -> Result < & mut Transaction < RT > , ErrorMetadata > {
59+ self . phase . tx ( )
60+ }
61+ }
62+
4063pub fn syscall_impl < RT : Runtime , P : SyscallProvider < RT > > (
4164 provider : & mut P ,
4265 name : & str ,
4366 args : JsonValue ,
4467) -> anyhow:: Result < JsonValue > {
4568 match name {
46- "1.0/queryCleanup" => DatabaseSyscallsV1 :: syscall_queryCleanup ( provider, args) ,
47- "1.0/queryStream" => DatabaseSyscallsV1 :: syscall_queryStream ( provider, args) ,
48- "1.0/db/normalizeId" => syscall_normalizeId ( provider, args) ,
69+ "1.0/queryCleanup" => syscall_query_cleanup ( provider, args) ,
70+ "1.0/queryStream" => syscall_query_stream ( provider, args) ,
71+ "1.0/db/normalizeId" => syscall_normalize_id ( provider, args) ,
4972
5073 #[ cfg( test) ]
5174 "throwSystemError" => anyhow:: bail!( "I can't go for that." ) ,
@@ -73,7 +96,7 @@ pub fn syscall_impl<RT: Runtime, P: SyscallProvider<RT>>(
7396 }
7497}
7598
76- fn syscall_normalizeId < RT : Runtime , P : SyscallProvider < RT > > (
99+ fn syscall_normalize_id < RT : Runtime , P : SyscallProvider < RT > > (
77100 provider : & mut P ,
78101 args : JsonValue ,
79102) -> anyhow:: Result < JsonValue > {
@@ -128,48 +151,52 @@ fn syscall_normalizeId<RT: Runtime, P: SyscallProvider<RT>>(
128151 }
129152}
130153
131- impl < RT : Runtime , P : SyscallProvider < RT > > DatabaseSyscallsV1 < RT , P > {
132- fn syscall_queryStream ( provider : & mut P , args : JsonValue ) -> anyhow:: Result < JsonValue > {
133- let _s: common:: tracing:: NoopSpan = static_span ! ( ) ;
134- let table_filter = provider. table_filter ( ) ;
135- let tx = provider. tx ( ) ?;
154+ fn syscall_query_stream < RT : Runtime , P : SyscallProvider < RT > > (
155+ provider : & mut P ,
156+ args : JsonValue ,
157+ ) -> anyhow:: Result < JsonValue > {
158+ let _s: common:: tracing:: NoopSpan = static_span ! ( ) ;
159+ let table_filter = provider. table_filter ( ) ;
160+ let tx = provider. tx ( ) ?;
136161
137- #[ derive( Deserialize ) ]
138- struct QueryStreamArgs {
139- query : JsonValue ,
140- version : Option < String > ,
141- }
142- let ( parsed_query, version) = with_argument_error ( "queryStream" , || {
143- let args: QueryStreamArgs = serde_json:: from_value ( args) ?;
144- let parsed_query = Query :: try_from ( args. query ) . context ( ArgName ( "query" ) ) ?;
145- let version = parse_version ( args. version ) ?;
146- Ok ( ( parsed_query, version) )
147- } ) ?;
148- // TODO: Are all invalid query pipelines developer errors? These could be bugs
149- // in convex/server.
150- let compiled_query =
151- { DeveloperQuery :: new_with_version ( tx, parsed_query, version, table_filter) ? } ;
152- let query_id = provider. query_manager ( ) . put_developer ( compiled_query) ;
162+ #[ derive( Deserialize ) ]
163+ struct QueryStreamArgs {
164+ query : JsonValue ,
165+ version : Option < String > ,
166+ }
167+ let ( parsed_query, version) = with_argument_error ( "queryStream" , || {
168+ let args: QueryStreamArgs = serde_json:: from_value ( args) ?;
169+ let parsed_query = Query :: try_from ( args. query ) . context ( ArgName ( "query" ) ) ?;
170+ let version = parse_version ( args. version ) ?;
171+ Ok ( ( parsed_query, version) )
172+ } ) ?;
173+ // TODO: Are all invalid query pipelines developer errors? These could be bugs
174+ // in convex/server.
175+ let compiled_query =
176+ { DeveloperQuery :: new_with_version ( tx, parsed_query, version, table_filter) ? } ;
177+ let query_id = provider. query_manager ( ) . put_developer ( compiled_query) ;
153178
154- #[ derive( Serialize ) ]
155- #[ serde( rename_all = "camelCase" ) ]
156- struct QueryStreamResult {
157- query_id : u32 ,
158- }
159- Ok ( serde_json:: to_value ( QueryStreamResult { query_id } ) ?)
179+ #[ derive( Serialize ) ]
180+ #[ serde( rename_all = "camelCase" ) ]
181+ struct QueryStreamResult {
182+ query_id : u32 ,
160183 }
184+ Ok ( serde_json:: to_value ( QueryStreamResult { query_id } ) ?)
185+ }
161186
162- fn syscall_queryCleanup ( provider : & mut P , args : JsonValue ) -> anyhow:: Result < JsonValue > {
163- let _s = static_span ! ( ) ;
187+ fn syscall_query_cleanup < RT : Runtime , P : SyscallProvider < RT > > (
188+ provider : & mut P ,
189+ args : JsonValue ,
190+ ) -> anyhow:: Result < JsonValue > {
191+ let _s = static_span ! ( ) ;
164192
165- #[ derive( Deserialize ) ]
166- #[ serde( rename_all = "camelCase" ) ]
167- struct QueryCleanupArgs {
168- query_id : u32 ,
169- }
170- let args: QueryCleanupArgs =
171- with_argument_error ( "queryCleanup" , || Ok ( serde_json:: from_value ( args) ?) ) ?;
172- let cleaned_up = provider. query_manager ( ) . cleanup_developer ( args. query_id ) ;
173- Ok ( serde_json:: to_value ( cleaned_up) ?)
193+ #[ derive( Deserialize ) ]
194+ #[ serde( rename_all = "camelCase" ) ]
195+ struct QueryCleanupArgs {
196+ query_id : u32 ,
174197 }
198+ let args: QueryCleanupArgs =
199+ with_argument_error ( "queryCleanup" , || Ok ( serde_json:: from_value ( args) ?) ) ?;
200+ let cleaned_up = provider. query_manager ( ) . cleanup_developer ( args. query_id ) ;
201+ Ok ( serde_json:: to_value ( cleaned_up) ?)
175202}
0 commit comments