Beispiel #1
0
        private void CheckSchema(string kind, IDictionary <string, object> data)
        {
            var newColumns        = GetColumnsFromData(data);
            var autoIncrementName = _keyAccess.GetAutoIncrementName(kind);

            if (autoIncrementName != null)
            {
                newColumns.Remove(autoIncrementName);
            }

            if (!IsKnownKind(kind))
            {
                foreach (var name in newColumns.Keys)
                {
                    ValidateNewColumnRank(name, newColumns[name], data[name]);
                }

                _db.Exec(CommonDatabaseDetails.FormatCreateTableCommand(_details, kind, autoIncrementName, newColumns));

                InvalidateSchema();
            }
            else
            {
                var oldColumns     = GetSchema()[kind];
                var changedColumns = new Dictionary <string, int>();
                var addedColumns   = new Dictionary <string, int>();

                foreach (var name in newColumns.Keys)
                {
                    var newRank = newColumns[name];

                    if (!oldColumns.ContainsKey(name))
                    {
                        ValidateNewColumnRank(name, newRank, data[name]);
                        addedColumns[name] = newRank;
                    }
                    else
                    {
                        var oldRank = oldColumns[name];

                        if (newRank > oldRank && Math.Max(oldRank, newRank) < CommonDatabaseDetails.RANK_STATIC_BASE)
                        {
                            changedColumns[name] = newRank;
                        }
                    }
                }

                if (changedColumns.Count <= 0 && addedColumns.Count <= 0)
                {
                    return;
                }

                _details.UpdateSchema(_db, kind, _keyAccess.GetAutoIncrementName(kind), oldColumns, changedColumns, addedColumns);
                InvalidateSchema();
            }
        }