예제 #1
0
        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));
            }
        }
예제 #2
0
        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);
        }
예제 #3
0
 public DbManager(DbParser dbParser)
 {
     this.dbParser = dbParser;
 }