/// <summary>
 /// </summary>
 /// <param name="schema"></param>
 public SelectionBuilderGenerator(SchemaDescription schema)
 {
     Schema = schema;
 }
示例#2
0
 /// <summary>
 /// </summary>
 /// <param name="schema"></param>
 public ContractClassGenerator(SchemaDescription schema)
 {
     Schema = schema;
 }
        /// <summary>
        /// </summary>
        /// <param name="filename"></param>
        /// <returns></returns>
        private Task<SchemaDescription> GenerateSchema(string filename) {
            return Task.Run(() => {
                var builder = BuildConnectionString();
                var schema = new SchemaDescription{
                    Database = new Database(),
                    Tables = new List<Table>()
                };

                using (var connection = new SqlConnection(builder.ConnectionString)) {
                    SchemaDescription previousSchema = null;
                    var generateDeviceId = Settings.Default.GenerateDeviceId;
                    var names = cblTables.CheckedItems;

                    connection.Open();

                    foreach (var name in names) {
                        DataTable keys;
                        var dbName = string.Empty;
                        var file = new FileInfo(filename);
                        var table = new Table();
                        var tableInfo = _tables.Select(string.Format("TABLE_NAME = '{0}'", name)).First();

                        cbDatabase.Invoke(() => {
                            dbName = cbDatabase.Text;
                        });

                        var columns = connection.GetSchema("Columns", new[]{
                            dbName, null, name.ToString()
                        }).Select();

                        if (tableInfo == null || !columns.Any()) {
                            continue;
                        }

                        if (file.Exists) {
                            previousSchema = JsonConvert.DeserializeObject<SchemaDescription>(File.ReadAllText(filename));
                            schema.Database = previousSchema.Database;
                        }
                        else {
                            schema.Database.Name = Path.GetFileNameWithoutExtension(file.Name);
                        }

                        schema.Database.ClassesPrefix = dbName;
                        schema.Database.HasDTO = true;

                        table.Name = name.ToString();
                        table.Fields = new List<Field>();

                        var sql = string.Format("SELECT * FROM [{0}].[{1}]", tableInfo["TABLE_SCHEMA"], name);
                        var command = new SqlCommand{
                            Connection = connection,
                            CommandText = sql
                        };

                        using (var reader = command.ExecuteReader(CommandBehavior.KeyInfo)) {
                            keys = reader.GetSchemaTable();
                        }

                        if (generateDeviceId) {
                            var deviceId = new Field{
                                IsId = true,
                                IsNullable = false,
                                Name = "DeviceId",
                                Type = "long"
                            };

                            table.Fields.Add(deviceId);
                        }

                        foreach (var column in columns) {
                            if (keys == null) {
                                break;
                            }

                            var columnName = column["COLUMN_NAME"];
                            var isNullable = column["IS_NULLABLE"].ToString();
                            //var indexes = connection.GetSchema("IndexColumns", new[]{
                            //    dbName, null, name.ToString(), null, columnName.ToString()
                            //}).Select();

                            //foreach (var index in indexes) {
                            //    if (keys == null) {
                            //        break;
                            //    }

                            // var row = keys.Select(string.Format("ColumnName = '{0}'",
                            // columnName) ).First(); var isIdentity =
                            // Convert.ToBoolean(row["IsIdentity"]); var isKey =
                            // Convert.ToBoolean(row["IsKey"]);

                            // field.IsId = isKey || isIdentity; field.IsUnique =
                            // Convert.ToBoolean(row["IsUnique"]);
                            //}

                            var row = keys.Select(string.Format("ColumnName = '{0}'", columnName)).First();
                            var isIdentity = Convert.ToBoolean(row["IsIdentity"]);
                            var isKey = Convert.ToBoolean(row["IsKey"]);

                            var field = new Field{
                                IsId = !generateDeviceId && (isKey || isIdentity),
                                IsIndex = generateDeviceId && (isKey || isIdentity),
                                IsNullable = isNullable == "YES",
                                IsUnique =
                                    (generateDeviceId && (isKey || isIdentity)) || Convert.ToBoolean(row["IsUnique"]),
                                Name = column["COLUMN_NAME"].ToString(),
                                Type = column["DATA_TYPE"].ToString()
                            };

                            field.ConvertSqlDataType();

                            table.Fields.Add(field);
                        }

                        schema.Tables.Add(table);
                    }

                    if (previousSchema != null && ShowQuestionMessageBox(Resources.UpgradeJsonFile) == DialogResult.Yes) {
                        var tables = schema.Tables;
                        var previousTables = previousSchema.Tables;
                        var except = tables.Except(previousTables, Table.TableComparer).ToList();
                        var intersect = tables.Intersect(previousTables, Table.TableComparer).ToList();
                        var versionIncreased = false;

                        if (intersect.Count > 0) {
                            foreach (var table in intersect) {
                                var previous = (from x in previousTables
                                                where x.Equals(table)
                                                select x).SingleOrDefault();

                                if (previous != null) {
                                    table.Joins = previous.Joins;
                                }
                            }

                            foreach (var fields in from table in intersect
                                                   let previous = (from x in previousTables
                                                                   where x.Equals(table)
                                                                   select x).SingleOrDefault()
                                                   where previous != null
                                                   select
                                                       table.Fields.Except(previous.Fields, Field.FieldComparer)
                                                            .ToList()) {
                                if (fields.Count > 0 && !versionIncreased) {
                                    schema.Database.Version += 1;
                                    versionIncreased = true;
                                }

                                fields.ForEach(x => x.Version = schema.Database.Version);
                            }
                        }

                        if (except.Count > 0) {
                            if (!versionIncreased) {
                                schema.Database.Version += 1;
                            }

                            except.ForEach(x => x.Version = schema.Database.Version);
                        }
                    }
                }

                return schema;
            });
        }
 /// <summary>
 /// </summary>
 /// <param name="schema"></param>
 public MetaDataGenerator(SchemaDescription schema)
 {
     Schema = schema;
 }
示例#5
0
 /// <summary>
 /// </summary>
 /// <param name="schema"></param>
 public MetaDataGenerator(SchemaDescription schema)
 {
     Schema = schema;
 }
示例#6
0
 /// <summary>
 /// </summary>
 /// <param name="schema"></param>
 public DataTransferObjectGenerator(SchemaDescription schema)
 {
     Schema = schema;
 }
示例#7
0
 /// <summary>
 /// </summary>
 /// <param name="schema"></param>
 public ProviderClassGenerator(SchemaDescription schema)
 {
     Schema = schema;
 }
 /// <summary>
 /// </summary>
 /// <param name="schema"></param>
 public ContractClassGenerator(SchemaDescription schema)
 {
     Schema = schema;
 }
示例#9
0
 /// <summary>
 /// </summary>
 /// <param name="schema"></param>
 public SelectionBuilderGenerator(SchemaDescription schema)
 {
     Schema = schema;
 }
示例#10
0
 /// <summary>
 /// </summary>
 /// <param name="schema"></param>
 public UriTypeGenerator(SchemaDescription schema)
 {
     Schema = schema;
 }
 /// <summary>
 /// </summary>
 /// <param name="schema"></param>
 public DatabaseHelperGenerator(SchemaDescription schema)
 {
     Schema = schema;
 }
 /// <summary>
 /// </summary>
 /// <param name="schema"></param>
 public DatabaseHelperGenerator(SchemaDescription schema)
 {
     Schema = schema;
 }
示例#13
0
        /// <summary>
        /// </summary>
        /// <param name="filename"></param>
        /// <returns></returns>
        private Task <SchemaDescription> GenerateSchema(string filename)
        {
            return(Task.Run(() => {
                var builder = BuildConnectionString();
                var schema = new SchemaDescription {
                    Database = new Database(),
                    Tables = new List <Table>()
                };

                using (var connection = new SqlConnection(builder.ConnectionString)) {
                    SchemaDescription previousSchema = null;
                    var generateDeviceId = Settings.Default.GenerateDeviceId;
                    var names = cblTables.CheckedItems;

                    connection.Open();

                    foreach (var name in names)
                    {
                        DataTable keys;
                        var dbName = string.Empty;
                        var file = new FileInfo(filename);
                        var table = new Table();
                        var tableInfo = _tables.Select(string.Format("TABLE_NAME = '{0}'", name)).First();

                        cbDatabase.Invoke(() => {
                            dbName = cbDatabase.Text;
                        });

                        var columns = connection.GetSchema("Columns", new[] {
                            dbName, null, name.ToString()
                        }).Select();

                        if (tableInfo == null || !columns.Any())
                        {
                            continue;
                        }

                        if (file.Exists)
                        {
                            previousSchema = JsonConvert.DeserializeObject <SchemaDescription>(File.ReadAllText(filename));
                            schema.Database = previousSchema.Database;
                        }
                        else
                        {
                            schema.Database.Name = Path.GetFileNameWithoutExtension(file.Name);
                        }

                        schema.Database.ClassesPrefix = dbName;
                        schema.Database.HasDTO = true;

                        table.Name = name.ToString();
                        table.Fields = new List <Field>();

                        var sql = string.Format("SELECT * FROM [{0}].[{1}]", tableInfo["TABLE_SCHEMA"], name);
                        var command = new SqlCommand {
                            Connection = connection,
                            CommandText = sql
                        };

                        using (var reader = command.ExecuteReader(CommandBehavior.KeyInfo)) {
                            keys = reader.GetSchemaTable();
                        }

                        if (generateDeviceId)
                        {
                            var deviceId = new Field {
                                IsId = true,
                                IsNullable = false,
                                Name = "DeviceId",
                                Type = "long"
                            };

                            table.Fields.Add(deviceId);
                        }

                        foreach (var column in columns)
                        {
                            if (keys == null)
                            {
                                break;
                            }

                            var columnName = column["COLUMN_NAME"];
                            var isNullable = column["IS_NULLABLE"].ToString();
                            //var indexes = connection.GetSchema("IndexColumns", new[]{
                            //    dbName, null, name.ToString(), null, columnName.ToString()
                            //}).Select();

                            //foreach (var index in indexes) {
                            //    if (keys == null) {
                            //        break;
                            //    }

                            // var row = keys.Select(string.Format("ColumnName = '{0}'",
                            // columnName) ).First(); var isIdentity =
                            // Convert.ToBoolean(row["IsIdentity"]); var isKey =
                            // Convert.ToBoolean(row["IsKey"]);

                            // field.IsId = isKey || isIdentity; field.IsUnique =
                            // Convert.ToBoolean(row["IsUnique"]);
                            //}

                            var row = keys.Select(string.Format("ColumnName = '{0}'", columnName)).First();
                            var isIdentity = Convert.ToBoolean(row["IsIdentity"]);
                            var isKey = Convert.ToBoolean(row["IsKey"]);

                            var field = new Field {
                                IsId = !generateDeviceId && (isKey || isIdentity),
                                IsIndex = generateDeviceId && (isKey || isIdentity),
                                IsNullable = isNullable == "YES",
                                IsUnique =
                                    (generateDeviceId && (isKey || isIdentity)) || Convert.ToBoolean(row["IsUnique"]),
                                Name = column["COLUMN_NAME"].ToString(),
                                Type = column["DATA_TYPE"].ToString()
                            };

                            field.ConvertSqlDataType();

                            table.Fields.Add(field);
                        }

                        schema.Tables.Add(table);
                    }

                    if (previousSchema != null && ShowQuestionMessageBox(Resources.UpgradeJsonFile) == DialogResult.Yes)
                    {
                        var tables = schema.Tables;
                        var previousTables = previousSchema.Tables;
                        var except = tables.Except(previousTables, Table.TableComparer).ToList();
                        var intersect = tables.Intersect(previousTables, Table.TableComparer).ToList();
                        var versionIncreased = false;

                        if (intersect.Count > 0)
                        {
                            foreach (var table in intersect)
                            {
                                var previous = (from x in previousTables
                                                where x.Equals(table)
                                                select x).SingleOrDefault();

                                if (previous != null)
                                {
                                    table.Joins = previous.Joins;
                                }
                            }

                            foreach (var fields in from table in intersect
                                     let previous = (from x in previousTables
                                                     where x.Equals(table)
                                                     select x).SingleOrDefault()
                                                    where previous != null
                                                    select
                                                    table.Fields.Except(previous.Fields, Field.FieldComparer)
                                                    .ToList())
                            {
                                if (fields.Count > 0 && !versionIncreased)
                                {
                                    schema.Database.Version += 1;
                                    versionIncreased = true;
                                }

                                fields.ForEach(x => x.Version = schema.Database.Version);
                            }
                        }

                        if (except.Count > 0)
                        {
                            if (!versionIncreased)
                            {
                                schema.Database.Version += 1;
                            }

                            except.ForEach(x => x.Version = schema.Database.Version);
                        }
                    }
                }

                return schema;
            }));
        }
 /// <summary>
 /// </summary>
 /// <param name="schema"></param>
 public UriTypeGenerator(SchemaDescription schema)
 {
     Schema = schema;
 }
 /// <summary>
 /// </summary>
 /// <param name="schema"></param>
 public DataTransferObjectGenerator(SchemaDescription schema)
 {
     Schema = schema;
 }