public Computation ResolveUri(TaskMaster task_master, string uri, out LibraryFailure reason) { if (!uri.StartsWith("sql:")) { reason = LibraryFailure.Missing; return(null); } reason = LibraryFailure.None; try { var param = new Dictionary <string, string>(); int first_colon = 5; while (first_colon < uri.Length && uri[first_colon] != ':') { first_colon++; } if (first_colon >= uri.Length) { return(new FailureComputation(task_master, new ClrSourceReference(), "Bad provider in URI “" + uri + "”.")); } var provider = uri.Substring(4, first_colon - 4); int question_mark = first_colon; while (question_mark < uri.Length && uri[question_mark] != '?') { question_mark++; } var uri_fragment = uri.Substring(first_colon + 1, question_mark - first_colon - 1); if (question_mark < uri.Length - 1) { foreach (var param_str in uri.Substring(question_mark + 1).Split(new [] { '&' })) { if (param_str.Length == 0) { continue; } var parts = param_str.Split(new [] { '=' }, 2); if (parts.Length != 2) { return(new FailureComputation(task_master, new ClrSourceReference(), "Bad parameter “" + param_str + "”.")); } param[parts[0]] = parts[1]; } } string error; var connection = DbParser.Parse(provider, uri_fragment, param, out error); if (connection == null) { return(new FailureComputation(task_master, new ClrSourceReference(), error ?? "Bad URI.")); } connection.Open(); var connection_proxy = ReflectedFrame.Create(task_master, connection, connection_hooks); connection_proxy.Set("provider", new SimpleStringish(provider)); return(new Precomputation(connection_proxy)); } catch (Exception e) { return(new FailureComputation(task_master, new ClrSourceReference(e), e.Message)); } }
static void Main(string[] args) { var c7SchemaFilename = args[0]; var csvDirectory = args[1]; var output = args[2]; // Parse C7 Schema File var c7Elements = C7Parser.ParseSchemaFile(c7SchemaFilename); var schema = EduHubSchema.FromC7Schema(c7Elements); // Augment with Database Information DbParser.AugmentSchemaFromCsv(csvDirectory, schema); // Apply customizations Customizations.EnsureNavigationFieldIndexes(schema); // Validate schema SchemaTests.TestForeignKeys(schema); var schemaXml = schema.ToXElement(); schemaXml.Save(output); }
public DbManager(DbParser dbParser) { this.dbParser = dbParser; }