public void ValidateAddIndexAssignUpdateStrategies(string createIndexStatementName, IndexMultiKey imk, string indexName) { // add index - for now _eventTableIndexMetadataRepo.AddIndex(false, imk, indexName, createIndexStatementName, true); // validate strategies, rollback if required foreach (var stmtEntry in _stmtNameToUpdateStrategyReceivers) { foreach (var strategyReceiver in stmtEntry.Value) { try { TableUpdateStrategyFactory.ValidateGetTableUpdateStrategy(this, strategyReceiver.UpdateHelper, strategyReceiver.IsOnMerge); } catch (ExprValidationException ex) { _eventTableIndexMetadataRepo.RemoveIndex(imk); throw new ExprValidationException("Failed to validate statement '" + stmtEntry.Key + "' as a recipient of the proposed index: " + ex.Message); } } } // assign new strategies foreach (var stmtEntry in _stmtNameToUpdateStrategyReceivers) { foreach (var strategyReceiver in stmtEntry.Value) { var strategy = TableUpdateStrategyFactory.ValidateGetTableUpdateStrategy(this, strategyReceiver.UpdateHelper, strategyReceiver.IsOnMerge); strategyReceiver.Receiver.Update(strategy); } } }
public void InitTableUpdateStrategy(Table table) { try { TableUpdateStrategy = TableUpdateStrategyFactory.ValidateGetTableUpdateStrategy(table.MetaData, UpdateHelperTable, false); } catch (ExprValidationException ex) { throw new EPException(ex.Message, ex); } }
public void InitTableUpdateStrategy(Table table) { try { tableUpdateStrategy = TableUpdateStrategyFactory.ValidateGetTableUpdateStrategy( table.MetaData, tableUpdate, true); } catch (ExprValidationException e) { throw new EPException(e.Message, e); } }
public TableUpdateStrategy GetTableUpdateStrategy(TableMetadata tableMetadata, EventBeanUpdateHelper updateHelper, bool isOnMerge) { return(TableUpdateStrategyFactory.ValidateGetTableUpdateStrategy(tableMetadata, updateHelper, isOnMerge)); }
public InfraOnMergeHelperForge( OnTriggerMergeDesc onTriggerDesc, EventType triggeringEventType, string triggeringStreamName, string infraName, EventTypeSPI infraEventType, StatementRawInfo statementRawInfo, StatementCompileTimeServices services, TableMetaData table) { matched = new List<InfraOnMergeMatchForge>(); unmatched = new List<InfraOnMergeMatchForge>(); var count = 1; var hasDeleteAction = false; var hasInsertIntoTableAction = false; var hasUpdateAction = false; foreach (var matchedItem in onTriggerDesc.Items) { IList<InfraOnMergeActionForge> actions = new List<InfraOnMergeActionForge>(); foreach (OnTriggerMergeAction item in matchedItem.Actions) { try { if (item is OnTriggerMergeActionInsert) { var insertDesc = (OnTriggerMergeActionInsert) item; var forge = SetupInsert( infraName, infraEventType, insertDesc, triggeringEventType, triggeringStreamName, statementRawInfo, services, table != null); actions.Add(forge); hasInsertIntoTableAction = forge.InsertIntoTable != null; } else if (item is OnTriggerMergeActionUpdate) { var updateDesc = (OnTriggerMergeActionUpdate) item; EventBeanUpdateHelperForge updateHelper = EventBeanUpdateHelperForgeFactory.Make( infraName, infraEventType, updateDesc.Assignments, onTriggerDesc.OptionalAsName, triggeringEventType, true, statementRawInfo.StatementName, services.EventTypeAvroHandler); ExprNode filterEval = updateDesc.OptionalWhereClause; if (table != null) { TableUpdateStrategyFactory.ValidateTableUpdateOnMerge( table, updateHelper.UpdateItemsPropertyNames); } var forge = new InfraOnMergeActionUpdForge(filterEval, updateHelper, table); actions.Add(forge); hasUpdateAction = true; } else if (item is OnTriggerMergeActionDelete) { var deleteDesc = (OnTriggerMergeActionDelete) item; ExprNode filterEval = deleteDesc.OptionalWhereClause; actions.Add(new InfraOnMergeActionDelForge(filterEval)); hasDeleteAction = true; } else { throw new ArgumentException("Invalid type of merge item '" + item.GetType() + "'"); } count++; } catch (Exception ex) when (ex is ExprValidationException || ex is EPException) { var isNot = item is OnTriggerMergeActionInsert; var message = "Validation failed in when-" + (isNot ? "not-" : "") + "matched (clause " + count + "): " + ex.Message; throw new ExprValidationException(message, ex); } } if (matchedItem.IsMatchedUnmatched) { matched.Add(new InfraOnMergeMatchForge(matchedItem.OptionalMatchCond, actions)); } else { unmatched.Add(new InfraOnMergeMatchForge(matchedItem.OptionalMatchCond, actions)); } } if (onTriggerDesc.OptionalInsertNoMatch != null) { insertUnmatched = SetupInsert( infraName, infraEventType, onTriggerDesc.OptionalInsertNoMatch, triggeringEventType, triggeringStreamName, statementRawInfo, services, table != null); } requiresTableWriteLock = hasDeleteAction || hasInsertIntoTableAction || hasUpdateAction; }