public void Test_element_with_a_value()
        {
            var xsd        = XsdNamespace;
            var ns         = "uri:test-schema";
            var schema     = new Schema("test", ns);
            var stringType = TestDataTypes.String;

            schema
            .CreateRootElement("DesignModels")
            .CreateElementWithValue("Element", stringType);

            var outputXsd    = new SchemaConverter().Convert(schema);
            var outputXsdStr = outputXsd.Element.ToTestString().FixNewlines().Trim();

            outputXsdStr.Should().Be(@"
<xs:schema elementFormDefault='qualified' targetNamespace='uri:test-schema' xmlns:tns='uri:test-schema' xmlns:xs='http://www.w3.org/2001/XMLSchema'>
    <xs:element name='DesignModels'>
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs='1' minOccurs='0' name='Element'>
                    <xs:complexType>
                        <xs:simpleContent>
                            <xs:extension base='xs:string'/>
                        </xs:simpleContent>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
".FixNewlines().Trim());
        }
        public override IList <DatabaseView> Views(string viewName)
        {
            var dt    = _schemaReader.Views();
            var views = SchemaConverter.Views(dt);

            return(views);
        }
        /// <summary>
        /// Gets all tables (just names, no columns).
        /// </summary>
        public IList <DatabaseTable> TableList()
        {
            RaiseReadingProgress(SchemaObjectType.Tables);
            DataTable dt = _schemaReader.Tables();

            return(SchemaConverter.Tables(dt));
        }
        public void Test_empty_repeating_element()
        {
            var xsd    = XsdNamespace;
            var ns     = "uri:test-schema";
            var schema = new Schema("test", ns);

            schema
            .CreateRootElement("DesignModels")
            .CreateElement("Element", null, c => c.AllowMultiple = true);

            var outputXsd    = new SchemaConverter().Convert(schema);
            var outputXsdStr = outputXsd.Element.ToTestString().FixNewlines().Trim();

            outputXsdStr.Should().Be(@"
<xs:schema elementFormDefault='qualified' targetNamespace='uri:test-schema' xmlns:tns='uri:test-schema' xmlns:xs='http://www.w3.org/2001/XMLSchema'>
    <xs:element name='DesignModels'>
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs='unbounded' minOccurs='0' name='Element'/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
".FixNewlines().Trim());
        }
        public void Test_empty_element_with_an_annotation()
        {
            var xsd    = XsdNamespace;
            var ns     = "uri:test-schema";
            var schema = new Schema("test", ns);

            schema
            .CreateRootElement("DesignModels")
            .CreateElement("Element", "Empty element");

            var outputXsd    = new SchemaConverter().Convert(schema);
            var outputXsdStr = outputXsd.Element.ToTestString().FixNewlines().Trim();

            outputXsdStr.Should().Be(@"
<xs:schema elementFormDefault='qualified' targetNamespace='uri:test-schema' xmlns:tns='uri:test-schema' xmlns:xs='http://www.w3.org/2001/XMLSchema'>
    <xs:element name='DesignModels'>
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs='1' minOccurs='0' name='Element'>
                    <xs:annotation>
                        <xs:documentation>
                            Empty element
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
".FixNewlines().Trim());
        }
Example #6
0
        public void Test_element_with_an_attribute()
        {
            var xsd        = XsdNamespace;
            var ns         = "uri:test-schema";
            var schema     = new Schema("test", ns);
            var stringType = new PrimitiveType("string", "xs:string");

            schema
            .CreateRootElement("DesignModels")
            .CreateElement("Element")
            .CreateAttribute("attrib", stringType);

            var outputXsd    = new SchemaConverter().Convert(schema);
            var outputXsdStr = outputXsd.Element.ToTestString().Trim();

            outputXsdStr.Should().Be(@"
<xs:schema elementFormDefault='qualified' targetNamespace='uri:test-schema' xmlns:tns='uri:test-schema' xmlns:xs='http://www.w3.org/2001/XMLSchema'>
    <xs:element name='DesignModels'>
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs='1' minOccurs='0' name='Element'>
                    <xs:complexType>
                        <xs:attribute name='attrib' type='xs:string'/>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
".Trim());
        }
Example #7
0
        /// <summary>
        /// Get all data for a specified table name.
        /// </summary>
        /// <param name="tableName">Name of the table. Oracle names can be case sensitive.</param>
        /// <returns>A dataset containing the tables: Columns, Primary_Keys, Foreign_Keys, Unique_Keys (only filled for Oracle), Indexes, IndexColumns, Triggers</returns>
        public override DataSet Table(string tableName)
        {
            //if (ProviderType != SqlType.SqlServer && ProviderType != SqlType.SqlServerCe && ProviderType != SqlType.Oracle && ProviderType != SqlType.MySql)
            //    return base.Table(tableName);
            //more information from sqlserver, oracle and mysql
            var ds = new DataSet();

            ds.Locale = CultureInfo.InvariantCulture;
            using (DbConnection conn = Factory.CreateConnection())
            {
                conn.ConnectionString = ConnectionString;
                conn.Open();

                //uses friend access to schemaReader
                LoadTable(tableName, ds, conn);
                if (ds.Tables.Count == 0)
                {
                    return(null);                      //no data found
                }
                if (string.IsNullOrEmpty(Owner))
                {
                    //we need schema for constraint look ups
                    Owner = SchemaConverter.FindSchema(ds.Tables[ColumnsCollectionName]);
                }

                ds.Tables.Add(PrimaryKeys(tableName, conn));
                ds.Tables.Add(ForeignKeys(tableName, conn));
                ds.Tables.Add(UniqueKeys(tableName, conn));
                ds.Tables.Add(CheckConstraints(tableName, conn));

                ds.Tables.Add(IdentityColumns(tableName, conn));
            }
            return(ds);
        }
        public override IList <DataType> DataTypes()
        {
            var list = SchemaConverter.DataTypes(_schemaReader.DataTypes());

            if (list.Count == 0)
            {
                list = _schemaReader.SchemaDataTypes();
            }
            return(list);
        }
        public override void Execute()
        {
            var designProject                         = Projects.GetFirstProjectByType(BasePluginConstants.ProjectType_Design);
            var schemaConverter                       = new SchemaConverter();
            var projectConfigurationSchema            = Schemas.GetSchemaByName(Core.CoreConstants.ProjectConfiguration_SchemaName);
            var projectConfigurationSchemaOutputModel = schemaConverter.Convert(projectConfigurationSchema);

            projectConfigurationSchemaOutputModel.File = designProject.GetFile("Schemas/XSD/ProjectConfiguration.xsd");
            OutputModels.AddOutputModel(projectConfigurationSchemaOutputModel);
        }
Example #10
0
        public override void Execute()
        {
            var designProject                = Projects.GetFirstProjectByType(BasePluginConstants.ProjectType_Design);
            var schemaConverter              = new SchemaConverter();
            var designModelSchema            = Schemas.GetSchemaByName(BasePluginConstants.DesignModel_SchemaName);
            var designModelSchemaOutputModel = schemaConverter.Convert(designModelSchema);

            designModelSchemaOutputModel.Renderer = new XmlOutputModelRenderer();
            designModelSchemaOutputModel.File     = designProject.GetFile("Schemas/XSD/DesignModels.xsd");
            OutputModels.AddOutputModel(designModelSchemaOutputModel);
        }
Example #11
0
        /// <summary>
        /// Gets all datatypes (and updates columns/arguments if already loaded)
        /// </summary>
        public IList <DataType> DataTypes()
        {
            List <DataType> list = SchemaConverter.DataTypes(_sr.DataTypes());

            if (list.Count == 0)
            {
                list = _sr.SchemaDataTypes();
            }
            DatabaseSchema.DataTypes.Clear();
            DatabaseSchema.DataTypes.AddRange(list);
            DatabaseSchemaFixer.UpdateDataTypes(DatabaseSchema); //if columns/arguments loaded later, run this method again.
            return(list);
        }
Example #12
0
        public async Task RunAsync()
        {
            var schemas = await Task.WhenAll(
                SchemaConverter.ReadAsync(options.From),
                SchemaConverter.ReadAsync(options.To)
                ).ConfigureAwait(false);

            var from = schemas.First();
            var to   = schemas.Last();

            SchemaConverter.WriteFileAsync("from", from);
            SchemaConverter.WriteFileAsync("to", to);

            ShowDiff(from, to);
        }
Example #13
0
        /// <summary>
        /// Gets all views.
        /// </summary>
        public IList <DatabaseView> AllViews()
        {
            DataTable           dt    = _sr.Views();
            List <DatabaseView> views = SchemaConverter.Views(dt);
            //get full datatables for all tables, to minimize database calls
            var columnLoader = new ViewColumnLoader(_sr);

            foreach (DatabaseView v in views)
            {
                v.Columns.AddRange(columnLoader.Load(v.Name));
            }
            DatabaseSchema.Views.Clear();
            DatabaseSchema.Views.AddRange(views);
            return(views);
        }
Example #14
0
        public async Task RunAsync()
        {
            var config = new GraphQlGeneratorConfiguration()
            {
                IncludeDeprecatedFields = options.GenerateDeprecatedTypes,
                JsonPropertyGeneration  = options.JsonPropertyGeneration,
                CSharpVersion           = options.UseNullable ? CSharpVersion.NewestWithNullableReferences : CSharpVersion.Compatible
            };

            var schema = await SchemaConverter.ReadAsync(options.Source).ConfigureAwait(false);

            var generator = new GraphQlGenerator(config);
            var content   = generator.GenerateFullClientCSharpFile(schema, options.Namespace);

            Console.WriteLine($"writing client-code to {options.DestinationFile}");
            File.WriteAllText(options.DestinationFile, content);
        }
        /// <summary>
        /// Gets all views.
        /// </summary>
        public IList <DatabaseView> AllViews(CancellationToken ct)
        {
            if (ct.IsCancellationRequested)
            {
                return(DatabaseSchema.Views);
            }
            RaiseReadingProgress(SchemaObjectType.Views);
            DataTable dt = _schemaReader.Views();

            if (ct.IsCancellationRequested)
            {
                return(DatabaseSchema.Views);
            }
            ReaderEventArgs.RaiseEvent(ReaderProgress, this, ProgressType.Processing, SchemaObjectType.Views);
            List <DatabaseView> views = SchemaConverter.Views(dt);
            var viewFilter            = Exclusions.ViewFilter;

            if (viewFilter != null)
            {
                views.RemoveAll(v => viewFilter.Exclude(v.Name));
            }

            //get full datatables for all tables, to minimize database calls
            if (ct.IsCancellationRequested)
            {
                return(views);
            }
            RaiseReadingProgress(SchemaObjectType.ViewColumns);

            var columnLoader = new ViewColumnLoader(_schemaReader);
            var count        = views.Count;

            for (var index = 0; index < count; index++)
            {
                if (ct.IsCancellationRequested)
                {
                    return(views);
                }
                DatabaseView v = views[index];
                ReaderEventArgs.RaiseEvent(ReaderProgress, this, ProgressType.Processing, SchemaObjectType.ViewColumns, v.Name, index, count);
                v.Columns.AddRange(columnLoader.Load(v.Name, v.SchemaOwner));
            }
            DatabaseSchema.Views.Clear();
            DatabaseSchema.Views.AddRange(views);
            return(views);
        }
Example #16
0
        public void Test_element_with_an_enum_value()
        {
            var xsd      = XsdNamespace;
            var ns       = "uri:test-schema";
            var schema   = new Schema("test", ns);
            var enumType = new EnumType("testEnum", "testEnum desc", new EnumDataTypeValue("one"), new EnumDataTypeValue("two", "Second"));

            schema
            .CreateRootElement("DesignModels")
            .CreateElementWithValue("Element", enumType);

            var outputXsd    = new SchemaConverter().Convert(schema);
            var outputXsdStr = outputXsd.Element.ToTestString().FixNewlines().Trim();

            outputXsdStr.Should().Be(@"
<xs:schema elementFormDefault='qualified' targetNamespace='uri:test-schema' xmlns:tns='uri:test-schema' xmlns:xs='http://www.w3.org/2001/XMLSchema'>
    <xs:element name='DesignModels'>
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs='1' minOccurs='0' name='Element'>
                    <xs:complexType>
                        <xs:simpleContent>
                            <xs:extension base='tns:enum-testEnum'/>
                        </xs:simpleContent>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:simpleType name='enum-testEnum'>
        <xs:restriction base='xs:string'>
            <xs:enumeration value='one'/>
            <xs:enumeration value='two'>
                <xs:annotation>
                    <xs:documentation>
                        Second
                    </xs:documentation>
                </xs:annotation>
            </xs:enumeration>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>
".FixNewlines().Trim());
        }
Example #17
0
        /// <summary>
        /// Gets all views.
        /// </summary>
        public IList <DatabaseView> AllViews()
        {
            DataTable           dt    = _schemaReader.Views();
            List <DatabaseView> views = SchemaConverter.Views(dt);
            var viewFilter            = Exclusions.ViewFilter;

            if (viewFilter != null)
            {
                views.RemoveAll(v => viewFilter.Exclude(v.Name));
            }
            //get full datatables for all tables, to minimize database calls
            var columnLoader = new ViewColumnLoader(_schemaReader);

            foreach (DatabaseView v in views)
            {
                v.Columns.AddRange(columnLoader.Load(v.Name, v.SchemaOwner));
            }
            DatabaseSchema.Views.Clear();
            DatabaseSchema.Views.AddRange(views);
            return(views);
        }
Example #18
0
        public IList <DatabaseTable> Load(CancellationToken ct)
        {
            if (ct.IsCancellationRequested)
            {
                return(EmptyList());
            }
            RaiseReadingProgress(SchemaObjectType.Tables);

            //get full datatables for all tables, to minimize database calls
            var tabs = _schemaReader.Tables();

            //we either use the converters directly (DataTable to our db model)
            //or loaders, which wrap the schema loader calls and converters
            //loaders hide the switch between calling for all tables, or a specific table
            if (ct.IsCancellationRequested)
            {
                return(EmptyList());
            }
            RaiseReadingProgress(SchemaObjectType.Columns);
            var columnLoader = new ColumnLoader(_schemaReader);

            if (ct.IsCancellationRequested)
            {
                return(EmptyList());
            }
            RaiseReadingProgress(SchemaObjectType.Constraints);
            var constraintLoader = new SchemaConstraintLoader(_schemaReader);
            var indexLoader      = new IndexLoader(_schemaReader);

            var ids       = _schemaReader.IdentityColumns(null);
            var computeds = _schemaReader.ComputedColumns(null);

            if (ct.IsCancellationRequested)
            {
                return(EmptyList());
            }
            RaiseReadingProgress(SchemaObjectType.Descriptions);
            var tableDescriptions  = new TableDescriptionConverter(_schemaReader.TableDescription(null));
            var columnDescriptions = new ColumnDescriptionConverter(_schemaReader.ColumnDescription(null));

            DataTable triggers         = _schemaReader.Triggers(null);
            var       triggerConverter = new TriggerConverter(triggers);

            if (ct.IsCancellationRequested)
            {
                return(EmptyList());
            }
            ReaderEventArgs.RaiseEvent(ReaderProgress, this, ProgressType.Processing, SchemaObjectType.Tables);
            var tables      = SchemaConverter.Tables(tabs);
            var tableFilter = _exclusions.TableFilter;

            if (tableFilter != null)
            {
                tables.RemoveAll(t => tableFilter.Exclude(t.Name));
            }
            tables.Sort(delegate(DatabaseTable t1, DatabaseTable t2)
            {
                //doesn't account for mixed schemas
                return(string.Compare(t1.Name, t2.Name, StringComparison.OrdinalIgnoreCase));
            });

            int tablesCount = tables.Count;

            for (var i = 0; i < tablesCount; i++)
            {
                var table      = tables[i];
                var tableName  = table.Name;
                var schemaName = table.SchemaOwner;

                if (ct.IsCancellationRequested)
                {
                    return(tables);
                }
                ReaderEventArgs.RaiseEvent(ReaderProgress, this, ProgressType.Processing, SchemaObjectType.Tables, tableName, i, tablesCount);
                table.Description = tableDescriptions.FindDescription(table.SchemaOwner, tableName);

                var databaseColumns = columnLoader.Load(tableName, schemaName);
                table.Columns.AddRange(databaseColumns);

                columnDescriptions.AddDescriptions(table);

                var pkConstraints = constraintLoader.Load(tableName, schemaName, ConstraintType.PrimaryKey);
                PrimaryKeyLogic.AddPrimaryKey(table, pkConstraints);

                var fks = constraintLoader.Load(tableName, schemaName, ConstraintType.ForeignKey);
                table.AddConstraints(fks);

                table.AddConstraints(constraintLoader.Load(tableName, schemaName, ConstraintType.UniqueKey));
                table.AddConstraints(constraintLoader.Load(tableName, schemaName, ConstraintType.Check));
                table.AddConstraints(constraintLoader.Load(tableName, schemaName, ConstraintType.Default));

                indexLoader.AddIndexes(table);

                SchemaConstraintConverter.AddIdentity(ids, table);
                SchemaConstraintConverter.AddComputed(computeds, table);

                table.Triggers.Clear();
                table.Triggers.AddRange(triggerConverter.Triggers(tableName));
                _schemaReader.PostProcessing(table);
            }
            return(tables);
        }
Example #19
0
        /// <summary>
        /// Gets all tables (just names, no columns).
        /// </summary>
        public IList <DatabaseTable> TableList()
        {
            DataTable dt = _sr.Tables();

            return(SchemaConverter.Tables(dt));
        }
        public override IList <DatabaseTable> Tables(string tableName)
        {
            var dt = _schemaReader.Tables(tableName);

            return(SchemaConverter.Tables(dt));
        }
Example #21
0
        /// <summary>
        /// Gets all tables (plus constraints, indexes and triggers).
        /// </summary>
        public IList <DatabaseTable> AllTables()
        {
            DataTable tabs = _sr.Tables();
            //get full datatables for all tables, to minimize database calls

            //we either use the converters directly (DataTable to our db model)
            //or loaders, which wrap the schema loader calls and converters
            //loaders hide the switch between calling for all tables, or a specific table
            var columnLoader     = new ColumnLoader(_sr);
            var constraintLoader = new SchemaConstraintLoader(_sr);
            var indexLoader      = new IndexLoader(_sr);

            DataTable ids = _sr.IdentityColumns(null);

            DataTable triggers         = _sr.Triggers(null);
            var       triggerConverter = new TriggerConverter(triggers);

            var tables = SchemaConverter.Tables(tabs);

            tables.Sort(delegate(DatabaseTable t1, DatabaseTable t2)
            {
                //doesn't account for mixed schemas
                return(string.Compare(t1.Name, t2.Name, StringComparison.OrdinalIgnoreCase));
            });


            foreach (DatabaseTable table in tables)
            {
                var tableName       = table.Name;
                var databaseColumns = columnLoader.Load(tableName);
                table.Columns.AddRange(databaseColumns);

                var pkConstraints = constraintLoader.Load(tableName, ConstraintType.PrimaryKey);
                PrimaryKeyLogic.AddPrimaryKey(table, pkConstraints);

                var fks = constraintLoader.Load(tableName, ConstraintType.ForeignKey);
                table.AddConstraints(fks);

                table.AddConstraints(constraintLoader.Load(tableName, ConstraintType.UniqueKey));
                table.AddConstraints(constraintLoader.Load(tableName, ConstraintType.Check));

                indexLoader.AddIndexes(table);

                SchemaConstraintConverter.AddIdentity(ids, table);
                table.Triggers.Clear();
                table.Triggers.AddRange(triggerConverter.Triggers(tableName));
                _sr.PostProcessing(table);
            }
            DatabaseSchema.Tables.Clear();
            DatabaseSchema.Tables.AddRange(tables);
            UpdateReferences();

            if (DatabaseSchema.DataTypes.Count > 0)
            {
                DatabaseSchemaFixer.UpdateDataTypes(DatabaseSchema);
            }

            _sr.PostProcessing(DatabaseSchema);

            return(tables);
        }