예제 #1
0
        public TemplateResult GetTemplate(QueryInput input)
        {
            var assmName  = Guid.NewGuid().ToIdentifierWithPrefix("a");
            var schemaSrc = _schemaService.GetSchemaSource(input.ConnectionString, assmName, withUsings: false);

            var src = _template
                      .Replace("##NS##", assmName)
                      .Replace("##DB##", "Proxy");

            var srcToken  = "##SOURCE##";
            var regex     = new Regex(@"$", RegexOptions.Multiline);
            var srcIdx    = src.IndexOf(srcToken);
            var srcOffset = src.Substring(0, srcIdx);
            var ms        = regex.Matches(srcOffset);

            src = src + schemaSrc;
            var fullSrc = src.Replace(srcToken, "");
            var header  = src.Substring(0, srcIdx);
            var footer  = src.Substring(srcIdx + srcToken.Length);

            Console.WriteLine("regex matches", ms.Count);
            // the usage of the template should not require mapping the column value
            return(new TemplateResult {
                Template = fullSrc,
                Header = header,
                Footer = footer,
                Namespace = assmName,
                ColumnOffset = 0,
                LineOffset = ms.Count // todo magic bullshit
            });
        }
예제 #2
0
        /// <summary>
        /// Returns the database context for the given connection string,
        /// optionally loading and compiling the types if missing.
        /// </summary>
        public CompileResult GetDatabaseContext(string connectionString)
        {
            if (!_map.ContainsKey(connectionString))
            {
                var assmName  = Guid.NewGuid().ToIdentifierWithPrefix("a");
                var schemaSrc = _schemaService.GetSchemaSource(connectionString, assmName);
                var result    = _compileService.LoadType(schemaSrc, assmName);
                _map.Add(connectionString, result);
            }

            return(_map[connectionString]);
        }