DeveelDB  20151217
complete SQL database system, primarly developed for .NET/Mono frameworks
SystemContextExtensions.cs
Go to the documentation of this file.
1 //
2 // Copyright 2010-2015 Deveel
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16 
17 using System;
18 
19 using Deveel.Data;
20 using Deveel.Data.Services;
21 
22 namespace Deveel.Data.Routines {
23  public static class SystemContextExtensions {
24  public static IRoutine ResolveRoutine(this ISystemContext context, Invoke invoke, IQuery queryContext) {
25  var resolvers = context.ResolveAllServices<IRoutineResolver>();
26  foreach (var resolver in resolvers) {
27  var routine = resolver.ResolveRoutine(invoke, queryContext);
28  if (routine != null)
29  return routine;
30  }
31 
32  return null;
33  }
34 
35  public static void UseRoutineResolver<TResolver>(this ISystemContext context) where TResolver : class, IRoutineResolver {
36  context.RegisterService<TResolver>();
37  }
38 
39  public static void UseRoutineResolver<TResolver>(this ISystemContext context, TResolver resolver)
40  where TResolver : class, IRoutineResolver {
41  context.RegisterInstance(resolver);
42  }
43 
44  public static void UseSystemFunctions(this ISystemContext context) {
45  context.UseRoutineResolver(new SystemFunctionsProvider());
46  }
47  }
48 }
The system uses instances of this interface to resolve routines given a user invocation.
static void UseSystemFunctions(this ISystemContext context)
The execution context of a database system, that is defining the configurations and the components us...
The contract to define a program routine that can interact with database objects. ...
Definition: IRoutine.cs:26
The information about the invocation of a routine, including the full name and arguments (as SqlExpre...
Definition: Invoke.cs:30
static IRoutine ResolveRoutine(this ISystemContext context, Invoke invoke, IQuery queryContext)
IRoutine ResolveRoutine(Invoke request, IQuery query)
Resolves a routine that matches the given invocation within the context provided. ...