예제 #1
0
 public OneCallContext(SdmapCompilerContext compilerContext, object obj)
 {
     Compiler = compilerContext;
     Obj      = obj;
     Defs     = new List <SegmentDef>();
     Deps     = new HashSet <string>();
 }
예제 #2
0
파일: SqlEmiterUtil.cs 프로젝트: sdcb/sdmap
        private static Result <EmitFunction> CompileCore(
            SdmapCompilerContext context,
            CoreSqlContext coreSql)
        {
            var fullName = NameUtil.GetFunctionName(coreSql);

            return(CoreSqlVisitor.CompileCore(
                       coreSql,
                       context,
                       fullName));
        }
예제 #3
0
 public OneCallContext(SdmapCompilerContext compilerContext, object obj,
                       List <SegmentDef> defs,
                       HashSet <string> deps,
                       List <object> fragments)
 {
     Compiler  = compilerContext;
     Obj       = obj;
     Defs      = defs;
     Deps      = deps;
     Fragments = fragments;
 }
예제 #4
0
파일: SqlEmiterUtil.cs 프로젝트: sdcb/sdmap
        public static Result <EmitFunction> CompileNamed(
            SdmapCompilerContext context,
            NamedSqlContext parseTree)
        {
            var id       = parseTree.GetToken(SYNTAX, 0).GetText();
            var fullName = context.GetFullNameInCurrentNs(id);

            var core = new CoreSqlVisitor(context);

            return(core.Process(parseTree.coreSql(), fullName)
                   .OnSuccess(() => core.Function));
        }
예제 #5
0
        public Result EnsureCompiled(SdmapCompilerContext context)
        {
            if (Emiter != null)
            {
                return(Result.Ok());
            }

            return(CompileInternal(context)
                   .OnSuccess(v =>
            {
                Emiter = v;
                _parseTree = null;
            }));
        }
예제 #6
0
        private Result <EmitFunction> CompileInternal(SdmapCompilerContext context)
        {
            if (_ns != "")
            {
                context.NsStack.Push(_ns);
            }

            var result = _compiler(context);

            if (_ns != "")
            {
                context.NsStack.Pop();
            }

            return(result);
        }
예제 #7
0
 internal static OneCallContext CreateByObj(object obj)
 {
     return(new OneCallContext(SdmapCompilerContext.CreateEmpty(), obj));
 }
예제 #8
0
 public static OneCallContext CreateEmpty()
 {
     return(new OneCallContext(SdmapCompilerContext.CreateEmpty(), null));
 }
예제 #9
0
파일: SqlEmiterUtil.cs 프로젝트: sdcb/sdmap
 public static EmitFunction EmiterFromId(SdmapCompilerContext context, string id, string ns)
 {
     return(context.GetEmiter(id, ns)
            .Emiter);
 }
예제 #10
0
파일: SqlEmiterUtil.cs 프로젝트: sdcb/sdmap
 private static Result <EmitFunction> CompileUnnamed(
     SdmapCompilerContext context,
     UnnamedSqlContext unnamedSql)
 {
     return(CompileCore(context, unnamedSql.coreSql()));
 }
예제 #11
0
 public string Emit(object v, SdmapCompilerContext context)
 {
     return(TryEmit(v, context).Value);
 }
예제 #12
0
 public Result <string> TryEmit(object v, SdmapCompilerContext context)
 {
     return(EnsureCompiled(context)
            .OnSuccess(() => Emiter(context, v))
            .Unwrap());
 }
예제 #13
0
 internal SdmapCompiler(SdmapCompilerContext context)
 {
     _context = context;
 }
예제 #14
0
 public SdmapCompiler()
 {
     _context = SdmapCompilerContext.CreateEmpty();
 }