/// <summary> /// 自动回复消息 /// </summary> /// <param name="xmlMsg"></param> private string GetTextMsg(XmlElement Xml) { //自动回复消息 StringBuilder Content = new StringBuilder(); Content.Append("您好,我是小怪机器人!"); //获取事件Model XmlElementText TextModel = GetXmlElementText.GetExmlModel(Xml); ObjectTypeHelper obj = new ObjectTypeHelper(); int NowTime = obj.ConvertDateTimeInt(DateTime.Now); StringBuilder TextXml = new StringBuilder(); TextXml.Append("<xml>"); TextXml.Append("<ToUserName><![CDATA[" + TextModel.FromUserName + "]]></ToUserName>"); TextXml.Append("<FromUserName><![CDATA[" + TextModel.ToUserName + "]]></FromUserName>"); TextXml.Append("<CreateTime>" + NowTime + "</CreateTime>"); TextXml.Append("<MsgType><![CDATA[text]]></MsgType>"); TextXml.Append("<Content><![CDATA[" + Content.ToString() + "]]></Content>"); TextXml.Append("<MsgId>" + TextModel.MsgId + "</MsgId>"); TextXml.Append("</xml>"); LogTextHelper.Log(TextXml.ToString()); return(TextXml.ToString()); }
public static void Grand <TSecuredDataObject, TOperation>([NotNull] TSecuredDataObject dataObject, [NotNull] TOperation operation, int?userID, int?groupID, DateTimeInterval interval) where TSecuredDataObject : class, ISecuredDataObject <TOperation> where TOperation : class, IFxDataObject { if (dataObject == null) { throw new ArgumentNullException("dataObject"); } if (operation == null) { throw new ArgumentNullException("operation"); } if ((userID == null && groupID == null) || (userID != null && groupID != null)) { throw new ArgumentException(Translations.PermissionsManager_Grand_One_and_only_one_of_parameters__userID__groupID__must_be_specified); } var doType = ObjectTypeHelper.GetObjectType(dataObject.GetType()); var p = new TblPermissions { OwnerUserRef = userID, OwnerGroupRef = groupID, CanBeDelagated = true, WorkingInterval = interval }; p.SetObjectID(doType, dataObject.ID); p.SetOperationID(doType, operation.ID); ServerModel.DB.Insert(p); }
public ImmutableHashSet <Identifier> GetKnownRoots(ObjectTypeHelper helper) { return((from root in Roots let type = helper.GetObjectType(root.TypeName) where type != null select type.Identifier(root.Name) ).ToImmutableHashSet()); }
public ImmutableHashSet <Tuple <Identifier, Identifier> > GetKnownSubs(ObjectTypeHelper helper) { return((from sub in Subs let parentType = helper.GetObjectType(sub.Parent.TypeName) let childType = helper.GetObjectType(sub.Child.TypeName) where parentType != null && childType != null select Tuple.Create(parentType.Identifier(sub.Parent.Name), childType.Identifier(sub.Child.Name)) ).ToImmutableHashSet()); }
/// <summary> /// Generates insert of an object /// </summary> /// <typeparam name="T"></typeparam> /// <param name="item"></param> public void Insert <T>(T item) { string tableName = ObjectTypeHelper.GetTableName <T>(item); // Properties of object that are not primary keys PropertyInfo[] modelProperties = ObjectTypeHelper.GetModelProperties <T>(item, false); // Properties of object that are also primary keys PropertyInfo[] primaryKeyProperties = ObjectTypeHelper.GetPrimaryKeyProperties <T>(item); if (modelProperties == null || modelProperties.Count() == 0) { // Moves composite keys to model properties if they are the only properties of the table/object if (primaryKeyProperties.Count() > 0) { modelProperties = primaryKeyProperties; } else { throw new Exception("Class has no properties or are missing Member attribute"); } } // Generates insert statement StringBuilder query = new StringBuilder(); query.Append("insert into " + tableName + "(" + String.Join(",", modelProperties.Select(x => x.Name)) + ") "); query.Append("values (" + String.Join(", ", modelProperties.Select(x => "@" + x.Name + suffix)) + ") "); query.Append("select @primaryKey = @@identity"); try { // Generates and executes sql command SqlCommand cmd = GenerateSqlCommand <T>(item, query.ToString(), modelProperties, null, ADOCRUDEnums.Action.Insert, suffix); cmd.ExecuteNonQuery(); // Loads db generated identity value into property with primary key attribute // if object only has 1 primary key // Multiple primary keys = crosswalk table which means property already contains the values if (primaryKeyProperties != null && primaryKeyProperties.Count() == 1) { primaryKeyProperties[0].SetValue(item, cmd.Parameters["primaryKey"].Value as object); } } catch (Exception ex) { sqlTransaction.Rollback(); throw new Exception(ex.Message); } }
/// <summary> /// 自动回复消息 /// </summary> /// <param name="xmlMsg"></param> private string GetServicesMsg(XmlElement Xml) { //获取事件Model XmlElementText TextModel = GetXmlElementText.GetExmlModel(Xml); ObjectTypeHelper obj = new ObjectTypeHelper(); int NowTime = obj.ConvertDateTimeInt(DateTime.Now); StringBuilder TextXml = new StringBuilder(); TextXml.Append("<xml>"); TextXml.Append("<ToUserName><![CDATA[" + TextModel.FromUserName + "]]></ToUserName>"); TextXml.Append("<FromUserName><![CDATA[" + TextModel.ToUserName + "]]></FromUserName>"); TextXml.Append("<CreateTime>" + NowTime + "</CreateTime>"); TextXml.Append("<MsgType><![CDATA[transfer_customer_service]]></MsgType>"); TextXml.Append("</xml>"); return(TextXml.ToString()); }
/// <summary> /// Generates update of an object /// </summary> /// <typeparam name="T"></typeparam> /// <param name="item"></param> public void Update <T>(T item) { string tableName = ObjectTypeHelper.GetTableName <T>(item); // Properties of object that are not primary keys PropertyInfo[] modelProperties = ObjectTypeHelper.GetModelProperties <T>(item, false); // Properties of object that are also primary keys PropertyInfo[] primaryKeyProperties = ObjectTypeHelper.GetPrimaryKeyProperties <T>(item); if (modelProperties == null || modelProperties.Count() == 0) { // Moves composite keys to model properties if they are the only properties of the table/object if (primaryKeyProperties.Count() > 0) { modelProperties = primaryKeyProperties; } else { throw new Exception("Class has no properties or are missing Member attribute"); } } // Generates update statement StringBuilder query = new StringBuilder(); query.Append("update " + tableName + " set "); query.Append(String.Join(", ", modelProperties.Select(x => x.Name + " = @" + x.Name + suffix))); query.Append(" where " + String.Join(" and ", primaryKeyProperties.Select(x => x.Name + " = @" + x.Name + suffix))); try { // Generates and executes sql command SqlCommand cmd = GenerateSqlCommand <T>(item, query.ToString(), modelProperties, primaryKeyProperties, ADOCRUDEnums.Action.Update, suffix); cmd.ExecuteNonQuery(); } catch (Exception ex) { sqlTransaction.Rollback(); throw new Exception(ex.Message); } }
public static void Delegate <TSecuredDataObject, TOperation>(int ownerUserID, [NotNull] TSecuredDataObject dataObject, [NotNull] TOperation operation, int?targetUserID, int?targetGroupID, DateTimeInterval interval) where TSecuredDataObject : class, ISecuredDataObject <TOperation> where TOperation : class, IFxDataObject { if (dataObject == null) { throw new ArgumentNullException("dataObject"); } if ((targetUserID == null && targetGroupID == null) || (targetUserID != null && targetGroupID != null)) { throw new ArgumentException("One and only one of parameters (targetUserID, targetGroupID) must be specified"); } if (operation == null) { throw new ArgumentNullException("operation"); } var doType = ObjectTypeHelper.GetObjectType(dataObject.GetType()); var prm = GetPermissions(doType, ownerUserID, null, operation.ID); if (prm.Count < 0) { throw new SecurityException(string.Format("User {0} have no access to do {1} on {2} ID = {3}. Cannot perform delegation", ownerUserID, operation.Name, dataObject.GetType().Name, dataObject.ID)); } var p = new TblPermissions { CanBeDelagated = true, OwnerGroupRef = targetGroupID, OwnerUserRef = targetUserID, WorkingInterval = interval, ParentPermitionRef = prm[0] }; p.SetObjectID(doType, dataObject.ID); p.SetOperationID(doType, operation.ID); ServerModel.DB.Insert(p); }
public static void Delegate <TSecuredDataObject, TOperation>(int ownerUserID, [NotNull] TSecuredDataObject dataObject, [NotNull] TOperation operation, int?targetUserID, int?targetGroupID, DateTimeInterval interval) where TSecuredDataObject : class, ISecuredDataObject <TOperation> where TOperation : class, IFxDataObject { if (dataObject == null) { throw new ArgumentNullException("dataObject"); } if ((targetUserID == null && targetGroupID == null) || (targetUserID != null && targetGroupID != null)) { throw new ArgumentException(Translations.PermissionsManager_Delegate_One_and_only_one_of_parameters__targetUserID__targetGroupID__must_be_specified); } if (operation == null) { throw new ArgumentNullException("operation"); } var doType = ObjectTypeHelper.GetObjectType(dataObject.GetType()); var prm = GetPermissions(doType, ownerUserID, null, operation.ID); if (prm.Count < 0) { throw new SecurityException(string.Format(Translations.PermissionsManager_Delegate_, ownerUserID, operation.Name, dataObject.GetType().Name, dataObject.ID)); } var p = new TblPermissions { CanBeDelagated = true, OwnerGroupRef = targetGroupID, OwnerUserRef = targetUserID, WorkingInterval = interval, ParentPermitionRef = prm[0] }; p.SetObjectID(doType, dataObject.ID); p.SetOperationID(doType, operation.ID); ServerModel.DB.Insert(p); }
public async void ExecuteUpsert() { if (mCloudDBZone == null) { ShowResultPopup("Please open CloudDBZone first!"); return; } CloudDBZoneObject bookInfoObject = (CloudDBZoneObject)ObjectTypeHelper.ConvertCSharpTypeToJavaType(bookInfoTest); Task <int> upsertTask = mCloudDBZone.ExecuteUpsertAsync(bookInfoObject); try { await upsertTask; int cloudDBZoneResult = upsertTask.Result; ShowResultPopup(cloudDBZoneResult + " records upserted"); } catch (Exception e) { ShowResultPopup("Insert book info failed" + e.Message); } }
public override IEnumerable <SubObjectState <BeforeStatementType, State> > GetExistingObjects(SchemaConnection connection, ObjectTypeHelper helper) { return(GetBasedOnKnownIdentifiers(connection, helper, (parent, name) => CreateAsCompleted(parent, name))); }
public override IEnumerable <RootObjectState <CompletionType, Stateless> > GetExistingObjects(SchemaConnection connection, ObjectTypeHelper helper) { return(GetBasedOnKnownIdentifiers(connection, helper, name => Create())); }
public override IEnumerable <RootObjectState <TableType, Stateless> > GetExistingObjects(SchemaConnection connection, ObjectTypeHelper helper) { return(from table in connection.GetAllTables() select Create(table.QualifiedName)); }
public override IEnumerable <SubObjectState <FieldType, State> > GetExistingObjects(SchemaConnection connection, ObjectTypeHelper helper) { return(from field in connection.GetAllFields() let table = TableType.Identifier(field.Table.QualifiedName) select field.IsSequencedPkey ? CreateSequencedPkey(table, field.Name, field.OrdinalPosition, field.DataType, field.IsNullable, field.SequenceName) : Create(table, field.Name, field.OrdinalPosition, field.DataType, field.IsNullable)); }
public override IEnumerable <SubObjectState <FulltextIndexType, State> > GetExistingObjects(SchemaConnection connection, ObjectTypeHelper helper) { return(from fulltextIndex in connection.GetAllFulltextIndexes() select Create(TableType.Identifier(fulltextIndex.Table.QualifiedName), FulltextCatalogType.Identifier(fulltextIndex.Catalog), fulltextIndex.KeyName, fulltextIndex.ColumnNames)); }
public override IEnumerable <SubObjectState <FkeyType, State> > GetExistingObjects(SchemaConnection connection, ObjectTypeHelper helper) { return(from fkey in connection.GetAllForeignKeys() select Create(TableType.Identifier(fkey.FromTable.QualifiedName), TableType.Identifier(fkey.ToTable.QualifiedName), fkey.Name, fkey.IsCascadeDelete, from j in fkey.Joins select new FieldPair(j.FromFieldName, j.ToFieldName))); }
/// <summary> /// 关注/取消关注事件 /// </summary> /// <param name="Xml"></param> /// <returns></returns> private string GetEvenMsg(XmlElement Xml) { StringBuilder EvenXml = new StringBuilder(); //获取事件Model XmlElementEven EvenModel = GetXmlElementEven.GetExmlModel(Xml); if (!string.IsNullOrEmpty(EvenModel.Event) && EvenModel.Event == "subscribe") { //订阅事件回复内容 StringBuilder Content = new StringBuilder(); Content.Append("您好,感谢关注厦门信同美建设工程有限公司!\n"); ObjectTypeHelper type = new ObjectTypeHelper(); int NowTime = type.ConvertDateTimeInt(DateTime.Now); EvenXml.Append("<xml>"); EvenXml.Append("<ToUserName><![CDATA[" + EvenModel.FromUserName + "]]></ToUserName>"); EvenXml.Append("<FromUserName><![CDATA[" + EvenModel.ToUserName + "]]></FromUserName>"); EvenXml.Append("<CreateTime>" + NowTime + "</CreateTime>"); EvenXml.Append("<MsgType><![CDATA[text]]></MsgType>"); EvenXml.Append("<Content><![CDATA[" + Content.ToString() + "]]></Content>"); EvenXml.Append("<FuncFlag>0</FuncFlag>"); EvenXml.Append("</xml>"); } if (EvenModel.EventKey == "My_SuCai") { //图文消息 ObjectTypeHelper type = new ObjectTypeHelper(); int NowTime = type.ConvertDateTimeInt(DateTime.Now); EvenXml.Append("<xml>"); EvenXml.Append("<ToUserName><![CDATA[" + EvenModel.FromUserName + "]]></ToUserName>"); EvenXml.Append("<FromUserName><![CDATA[" + EvenModel.ToUserName + "]]></FromUserName>"); EvenXml.Append("<CreateTime>" + NowTime + "</CreateTime>"); EvenXml.Append("<MsgType><![CDATA[news]]></MsgType>"); EvenXml.Append("<ArticleCount>2</ArticleCount>"); EvenXml.Append("<Articles>"); EvenXml.Append("<item>"); EvenXml.Append("<Title><![CDATA[我是标题]]></Title> "); EvenXml.Append("<Description><![CDATA[我是描述]]></Description>"); EvenXml.Append("<PicUrl><![CDATA[http://www.51fdc.com/imageshome/upload/201407170627106992.jpg]]></PicUrl>"); EvenXml.Append("<Url><![CDATA[www.baidu.com]]></Url>"); EvenXml.Append("</item>"); EvenXml.Append("<item>"); EvenXml.Append("<Title><![CDATA[我是二标题]]></Title> "); EvenXml.Append("<Description><![CDATA[我是二描述]]></Description>"); EvenXml.Append("<PicUrl><![CDATA[http://img3.fengniao.com/forum/attachpics/851/67/34013207_1024.jpg]]></PicUrl>"); EvenXml.Append("<Url><![CDATA[http://mp.weixin.qq.com/s?__biz=MzI0NDQ3NDkwMQ==&mid=100000027&idx=1&sn=9dfc09b88f74a97c06420defe5b4e88d&chksm=695c74615e2bfd7709bae70c2edfc61ddcbbf392d4e62d2651ec85c1a84ed3c923946cded0c1&scene=18#wechat_redirect]]></Url>"); EvenXml.Append("</item>"); EvenXml.Append("</Articles>"); EvenXml.Append("</xml>"); } if (EvenModel.EventKey == "My_MediaId") { //图片消息 ObjectTypeHelper type = new ObjectTypeHelper(); int NowTime = type.ConvertDateTimeInt(DateTime.Now); EvenXml.Append("<xml>"); EvenXml.Append("<ToUserName><![CDATA[" + EvenModel.FromUserName + "]]></ToUserName>"); EvenXml.Append("<FromUserName><![CDATA[" + EvenModel.ToUserName + "]]></FromUserName>"); EvenXml.Append("<CreateTime>" + NowTime + "</CreateTime>"); EvenXml.Append("<MsgType><![CDATA[image]]></MsgType>"); EvenXml.Append("<Image>"); EvenXml.Append("<MediaId><![CDATA[dSqdqKXPv82mkBeBvf3kjePuRqHnOU1TLWsZs21XCjg]]></MediaId>"); EvenXml.Append("</Image>"); EvenXml.Append("</xml>"); } if (EvenModel.EventKey == "My_Link") { //链接消息 ObjectTypeHelper type = new ObjectTypeHelper(); int NowTime = type.ConvertDateTimeInt(DateTime.Now); EvenXml.Append("<xml>"); EvenXml.Append("<ToUserName><![CDATA[" + EvenModel.FromUserName + "]]></ToUserName>"); EvenXml.Append("<FromUserName><![CDATA[" + EvenModel.ToUserName + "]]></FromUserName>"); EvenXml.Append("<CreateTime>" + NowTime + "</CreateTime>"); EvenXml.Append("<MsgType><![CDATA[link]]></MsgType>"); EvenXml.Append("<Title><![CDATA[公众平台官网链接]]></Title>"); EvenXml.Append("<Description><![CDATA[公众平台官网链接]]></Description>"); EvenXml.Append("<Url><![CDATA[www.baidu.com]]></Url>"); EvenXml.Append("<MsgId>6349021361213152058</MsgId>"); EvenXml.Append("</xml>"); } return(EvenXml.ToString()); }
public override IEnumerable<SubObjectState<PreUpgradeHookType, Stateless>> GetExistingObjects(SchemaConnection connection, ObjectTypeHelper helper) { return GetBasedOnKnownIdentifiers(connection, helper, (query, name) => Create(query)); }
public override IEnumerable <RootObjectState <TableRenameType, TableRenameType.State> > GetExistingObjects(SchemaConnection connection, ObjectTypeHelper helper) { // Table renames don't get tracked in existing databases at all - no point! yield break; }
public override IEnumerable <RootObjectState <FulltextCatalogType, Stateless> > GetExistingObjects(SchemaConnection connection, ObjectTypeHelper helper) { return(from name in connection.GetAllFulltextCatalogs() select Create(name)); }
public override IEnumerable <RootObjectState <OldVersionCacheMigrationType, OldVersionCacheMigrationType.State> > GetExistingObjects(SchemaConnection connection, ObjectTypeHelper helper) { // This runs before the state table exists, so we wait until the Step is run to figure out what exists. yield break; }
public override IEnumerable <SubObjectState <PendingReorderTableType, Stateless> > GetExistingObjects(SchemaConnection connection, ObjectTypeHelper helper) { return(GetBasedOnKnownIdentifiers(connection, helper, (parent, name) => Create(parent, name))); }
public override IEnumerable <SubObjectState <UniqueIndexType, UniqueIndexType.State> > GetExistingObjects(SchemaConnection connection, ObjectTypeHelper helper) { return(from index in connection.GetAllUniqueIndexes() join custom in connection.GetAllIndexCustomState() on new { table = TableType.Identifier(index.Table.QualifiedName), index = UniqueIndexType.Identifier(index.Name) } equals new { table = TableType.Identifier(custom.Table.QualifiedName), index = UniqueIndexType.Identifier(custom.IndexName) } into indexCustom select CreateState(TableType.Identifier(index.Table.QualifiedName), index.Name, new State(index.IsPrimaryKey, from field in index.FieldNames select FieldType.Identifier(field), indexCustom.Any() ? indexCustom.Single().CustomState : index.IsPrimaryKey ? connection.SchemaDriver.DefaultPrimaryKeyCustomState : connection.SchemaDriver.DefaultUniqueConstraintCustomState))); }
public override IEnumerable <RootObjectState <ViewType, State> > GetExistingObjects(SchemaConnection connection, ObjectTypeHelper helper) { return(from view in connection.GetAllViews() select Create(view.QualifiedName, view.Body)); }
public override IEnumerable <RootObjectState <QueryType, ProcState> > GetExistingObjects(SchemaConnection connection, ObjectTypeHelper helper) { var existingNames = new HashSet <string>(connection.DbDriver.DbStringComparer); foreach (var proc in connection.GetAllStoredProcsAndFunctions()) { existingNames.Add(proc.QualifiedName); var func = proc as IntrospectedFunction; if (func != null) { yield return(CreateFunction(func.QualifiedName, func.Parameters, func.ReturnType, func.Body)); } else { yield return(CreateProc(proc.QualifiedName, proc.Parameters, proc.Body)); } } // Queries that do not exist as stored procs or functions just get stored as known objects in the state tables. foreach (var known in GetBasedOnKnownIdentifiers(connection, helper, CreateUnstored)) { if (!existingNames.Contains(known.Name)) { yield return(known); } } }
public override IEnumerable <SubObjectState <TriggerType, State> > GetExistingObjects(SchemaConnection connection, ObjectTypeHelper helper) { return(from trigger in connection.GetAllTriggers() select Create(TableType.Identifier(trigger.Table.QualifiedName), trigger.QualifiedName, trigger.Timing, trigger.Events, trigger.Body)); }
private static void runSteps(SchemaConnection connection, IOutput output, SchemaChangeOptions options, string phaseName, IEnumerable <ISchemaProvider> providers, ref DatabaseState currentState, ref ImmutableHashSet <ObjectType> objectTypes, ref StateStorage storage) { using (var progress = output.ProgressBlock()) { output.Message(phaseName + ": Starting..."); // Get object types, get steps, get desired state, get current state, everything else var chunks = progress.GetChunks(1, 1, 5, 5, 1, 50).ToList(); var oldTypes = objectTypes; using (chunks[0].Start()) { objectTypes = (from provider in providers from objectType in provider.GetObjectTypes(connection.SchemaDriver) select objectType).ToImmutableHashSet(); output.Verbose(phaseName + ": Object types: " + string.Join(", ", objectTypes)); } // Get all the steps and organize them into order IImmutableList <StepBase> steps; using (chunks[1].Start()) { steps = sortSteps(from objectType in objectTypes from step in objectType.Steps select step); output.Verbose(phaseName + ": Steps: " + string.Join(", ", steps)); } // Get the desired state DatabaseState desiredState; using (chunks[2].Start()) { output.Verbose(phaseName + ": Determining desired database state..."); desiredState = DatabaseState.Create(from provider in providers from state in provider.GetDesiredState(connection, chunks[2]) select state); foreach (var overrideProvider in providers.OfType <ISchemaOverrideProvider>()) { desiredState = overrideProvider.ApplyOverrides(connection, desiredState); } output.Message(phaseName + ": " + counted(desiredState.Count, "object") + " desired."); } ObjectTypeHelper helper; using (chunks[3].Start()) { // Get the current state output.Verbose(phaseName + ": Determining current database state..."); helper = new ObjectTypeHelper(objectTypes, storage != null, connection.DbDriver); currentState = currentState.With(from objectType in objectTypes where !oldTypes.Contains(objectType) from state in objectType.GetExistingObjects(connection, helper) select state); output.Verbose(phaseName + ": " + counted(currentState.Count, "object") + " existing."); } // Filter to only things that are relevant here using (chunks[4].Start()) { output.Verbose(phaseName + ": Filtering..."); if (storage != null) { var priorKnownRoots = storage.GetKnownRoots(helper); var priorKnownSubs = storage.GetKnownSubs(helper); // Anything that exists in *both* current and desired is treated as known and assumed to be in-scope for consideration var knownRoots = priorKnownRoots.Union(from root in currentState.RootObjects where desiredState.Contains(root) select root.Identifier); foreach (var extra in knownRoots.Except(priorKnownRoots)) { storage.PutRoot(extra); } // FIXME: remove from storage anything that's of a type that's under consideration but is neither current nor desired var knownSubs = priorKnownSubs.Union(from sub in currentState.AllChildren where desiredState.Contains(sub) select Tuple.Create(sub.ParentIdentifier, sub.Identifier)); foreach (var extra in knownSubs.Except(priorKnownSubs)) { storage.PutSub(extra.Item1, extra.Item2); } // FIXME: remove from storage anything that's of a type that's under consideration but is neither current nor desired var _storage = storage; var initialState = currentState; currentState = currentState.WithFilters((root) => desiredState.ContainsRoot(root) || Objects.Tables.TableRenameType.ContainsRenameTo(desiredState, root) || Objects.Tables.PendingReorderTableType.IsTablePendingReorder(initialState, root) || (options.PreserveUnknownObjects ? !initialState.ContainsRoot(root) : _storage.ContainsRoot(root)), null); } else { // FIXME this doesn't allow for any flexibility in whether the nrdo_ tables live in dbo currentState = currentState.WithFilters(root => root.Name.StartsWith("dbo.nrdo_", StringComparison.OrdinalIgnoreCase), null); } output.Message(phaseName + ": " + counted(currentState.Count, "applicable existing object") + "."); } var isFullRun = storage != null; if (isFullRun) { // Sanity check for any before statements that will be skipped due to the associated step not existing var stepSet = new HashSet <string>(from step in steps select step.Identifier, Nstring.DBEquivalentComparer); var current = currentState; // Can't use ref parameter directly inside linq query var unknownBefores = from stmt in BeforeStatementType.AllFrom(desiredState) where !stepSet.Contains(stmt.State.Step) && !current.Contains(stmt) select stmt; foreach (var stmt in unknownBefores) { output.Warning(stmt.Name + " on " + stmt.ParentIdentifier + " will not be executed because there is no such step as " + stmt.State.Step); } } var changes = SchemaChanges.Create(currentState, desiredState, connection, chunks[5], options, storage); changes.PerformSteps(steps, phaseName, isFullRun); currentState = changes.Current.WithoutFilters(); storage = changes.Storage; if (changes.HasFailed) { throw new ApplicationException("Schema update failed"); } output.Message(phaseName + ": Completed."); output.Message(phaseName + ": " + counted(changes.StatementCount, "statement") + " executed."); output.Message(phaseName + ": " + counted(currentState.Count, "object") + " existing."); } }
public override IEnumerable <SubObjectState <FieldOrderSensitivityType, Stateless> > GetExistingObjects(SchemaConnection connection, ObjectTypeHelper helper) { // We don't bother storing this in the database - it's a characteristic of the desired state only. yield break; }